上一篇
linux系统如何升级ssh
- Linux
- 2025-07-29
- 4
Linux 系统中升级 SSH,可先更新包列表(如
sudo apt update
或
sudo yum check-update
等),
在Linux系统中,升级SSH可以通过多种方法实现,以下是几种常见的升级方式及详细步骤:
使用包管理器直接升级(以YUM为例)
步骤 | 命令 | 说明 |
---|---|---|
查看当前SSH版本 | ssh -V |
查看当前已安装的SSH版本信息。 |
更新SSH软件包 | yum update openssh -y |
使用YUM包管理器直接更新openssh软件包到最新版本。 |
源码编译升级
准备工作
步骤 | 命令 | 说明 |
---|---|---|
安装依赖包 | yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel pam zlib |
安装编译OpenSSH所需的各种依赖包。 |
下载源码包 | wget -c https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz<br>wget -c https://ftp.openssl.org/source/openssl-1.0.2r.tar.gz |
从指定网址下载OpenSSH和OpenSSL的源码压缩包。 |
升级OpenSSL(如果需要)
步骤 | 命令 | 说明 |
---|---|---|
解压OpenSSL源码包 | tar xfz openssl-1.0.2r.tar.gz |
解压下载的OpenSSL源码压缩包。 |
备份原OpenSSL二进制和头文件 | mv /usr/bin/openssl /usr/bin/openssl_bak<br>mv /usr/include/openssl /usr/include/openssl_bak |
备份原有的OpenSSL二进制文件和头文件目录,以防万一。 |
编译安装OpenSSL | cd /opt/openssl-1.0.2r<br>./config shared && make && make install |
进入解压后的OpenSSL源码目录,配置、编译并安装OpenSSL。 |
创建软链接 | ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl<br>ln -s /usr/local/ssl/include/openssl /usr/include/openssl |
将新安装的OpenSSL二进制文件和头文件目录链接到系统默认位置。 |
更新动态链接库配置 | echo "/usr/local/ssl/lib" >> /etc/ld.so.conf<br>/sbin/ldconfig |
将新安装的OpenSSL库路径添加到动态链接库配置文件中,并更新动态链接库缓存。 |
升级OpenSSH
步骤 | 命令 | 说明 |
---|---|---|
解压OpenSSH源码包 | tar xfz openssh-8.1p1.tar.gz |
解压下载的OpenSSH源码压缩包。 |
备份原SSH配置目录 | cp -r /etc/ssh /tmp/ |
备份原有的SSH配置目录,以便后续参考和恢复。 |
删除原SSH配置目录(谨慎操作) | rm -rf /etc/ssh |
删除原有的SSH配置目录,准备使用新的配置。 |
配置、编译并安装OpenSSH | cd /opt/openssh-8.1p1<br>chown -R root.root /opt/openssh-8.1p1<br>./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl --with-zlib --with-md5-passwords --with-pam && make && make install |
进入解压后的OpenSSH源码目录,配置编译选项(指定安装路径、配置文件路径、OpenSSL路径等),然后编译并安装。 |
创建新的SSH配置文件 | cat > /etc/ssh/sshd_config <<EOF<br>PermitRootLogin yes<br>AuthorizedKeysFile .ssh/authorized_keys<br>UseDNS no<br>Subsystem sftp /usr/libexec/sftp-server<br>EOF |
创建新的SSH服务器配置文件,根据实际需求设置相关参数。 |
复制启动脚本和PAM配置 | cp -a contrib/redhat/sshd.init /etc/init.d/sshd<br>cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam |
将OpenSSH提供的启动脚本和PAM配置文件复制到系统相应位置。 |
设置启动脚本权限和开机自启 | chmod +x /etc/init.d/sshd<br>chkconfig --add sshd<br>systemctl enable sshd |
设置启动脚本为可执行,添加开机自启服务,并启用SSH服务。 |
重启SSH服务 | service sshd restart |
重启SSH服务使配置生效。 |
使用RPM包升级
准备工作
步骤 | 命令 | 说明 |
---|---|---|
查看当前SSH版本 | ssh -V |
查看当前已安装的SSH版本信息。 |
查看已安装的SSH软件包 | rpm -qa | grep openssh |
查看系统中已安装的与SSH相关的软件包。 |
生成RPM包(如果需要)
步骤 | 命令 | 说明 |
---|---|---|
建立目录结构 | cd /root<br>mkdir -pv rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} |
在指定目录下创建用于构建RPM包的目录结构。 |
上传并解压源码包 | tar zxvf openssh-9.9p1.tar.gz |
将下载的OpenSSH源码包上传到指定目录并解压。 |
拷贝SPEC文件并修改 | cp openssh-9.9p1/contrib/redhat/openssh.spec ../SPECS<br>cd ../SPECS/<br>vim openssh.spec |
将OpenSSH源码中的SPEC文件复制到指定目录,并根据需要修改其中的参数(如禁用x11-askpass和gnome-askpass等)。 |
生成RPM包 | rpmbuild -bb openssh.spec |
使用rpmbuild命令根据SPEC文件生成RPM包,如果提示缺少依赖,可以使用yumdownloader命令下载并安装所有依赖包。 |
升级SSH
步骤 | 命令 | 说明 |
---|---|---|
删除原版本SSH软件包 | yum remove openssh |
使用YUM包管理器删除已安装的旧版本SSH软件包。 |
安装新版本RPM包 | cd /root/rpmbuild/RPMS/x86_64<br>rpm -Uvh openssh-.rpm |
进入生成的RPM包所在目录,使用rpm命令安装新版本的SSH软件包。 |
升级后检查
升级完成后,使用ssh -V
命令再次查看SSH版本,确认是否已成功升级到目标版本,尝试通过SSH客户端连接到服务器,检查连接是否正常,以及相关功能(如密钥认证、密码认证等)是否可用。
注意事项
- 在升级过程中,务必备份重要数据和配置文件,以防升级失败导致数据丢失或服务不可用。
- 如果服务器通过SSH进行远程管理,建议在升级前先安装并配置好其他远程管理工具(如Telnet),以防SSH升级过程中出现问题导致无法远程登录服务器。
- 在编译安装过程中,可能需要根据实际系统环境和需求调整编译选项和配置文件参数。
FAQs
问题1:升级SSH后,原来的SSH配置文件还会保留吗?
答:如果采用源码编译升级的方式,并且按照上述步骤操作,在编译安装前会备份原SSH配置目录到/tmp/
目录下,安装完成后需要手动将需要的配置项从备份目录中恢复到新的配置文件中,如果采用RPM包升级的方式,一般会保留大部分原有的配置文件,但建议在升级前备份重要的配置文件,以防万一。
问题2:升级SSH时为什么要先安装并配置Telnet服务?
答:因为在某些情况下,如果直接通过SSH进行升级,一旦升级过程中出现问题导致SSH服务无法正常启动,将会无法远程登录服务器进行修复,而安装并配置Telnet服务后,即使SSH升级失败,仍然可以通过Telnet登录服务器进行排查和修复,从而保证服务器的远程管理功能不会完全丧失。