离线升级OpenSSH
思路:在版本相同,架构相同的有网络服务器上编译好二进制包后,传输到无网络服务器替换二进制包。
2、编译
./configure --prefix=/usr/local/openssh [--sysconfdir=/etc/ssh] --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers [--with-ssl-dir=/usr/local/openssl] --with-ssl --without-hardening
# 参数解析与默认值说明:
# –prefix=/usr/local/openssh
作用:指定 OpenSSH 的安装根目录。编译后的二进制文件、库、配置文件等会安装在此目录的子文件夹(如 bin、lib、etc 等)。
默认值:–prefix=/usr/local,若不指定,OpenSSH 默认安装到 /usr/local 下,例如:
可执行文件:/usr/local/bin/ssh
配置文件:/usr/local/etc/ssh/sshd_config
# –sysconfdir=/etc/ssh
作用:指定配置文件(如 sshd_config、ssh_config)的安装目录。
默认值:–sysconfdir=$prefix/etc(即 /usr/local/openssh/etc,因为 prefix 被设置为 /usr/local/openssh)。
# –with-md5-passwords
作用:启用MD5密码支持。默认可能禁用,因为MD5不安全。如果用户需要支持旧系统或特定配置,可能需要启用,否则不必。
# –with-pam
作用:启用PAM支持。如果系统使用PAM进行身份验证,可能需要启用。configure脚本可能自动检测系统是否安装了PAM开发包,如果已安装,默认启用,否则禁用。如果用户需要确保启用,即使系统有PAM但自动检测失败,可能需要显式指定。
# –with-zlib
作用:启用zlib压缩支持。OpenSSH可能默认启用,如果zlib已安装,因此可能不需要显式指定,除非需要指定路径或确保启用。
# –with-ssl
作用:指定使用SSL库,如:OpenSSL。如果软件需要SSL/TLS功能(如SSH使用加密),则必须存在SSL库。configure脚本可能默认查找系统安装的OpenSSL,如果找到则自动启用,否则报错。如果用户安装了自定义路径的OpenSSL,则需要–with-ssl=/path。
# –with-tcp-wrappers
作用:启用TCP Wrappers支持。这取决于用户是否需要使用hosts.allow/deny来控制访问,默认可能不启用,因此,如果需要此功能,需显式指定。
# –without-hardening
作用:禁用安全加固选项。默认可能启用某些加固措施,如:栈保护等。禁用可能降低安全性,因此,除非必要,不建议使用。
3、打包传输至无网络服务器
① 先打成tar.gz包,然后上传到需要升级的服务器内并解压到/usr/local/下,生成openssh目录
# 在有网络服务器下进行
cd /usr/local
tar -czvf openssh.tar.gz openssh
# 在无网络服务器下进行
cd /usr/local
tar -xzvf openssh.tar.gz
2
3
4
5
6
7
② ldd查看依赖库情况,如果ldd依赖缺失,首先要补充缺失文件,如果不缺失,直接替换二进制包。
# 在无网络服务器下进行
ldd /usr/local/openssh/bin/ssh
2
# 在无网络服务器下进行
ldd /usr/local/openssh/sbin/sshd
2
如果上述信息提示存在依赖缺失,首先需要上传包含相关文件的文件包(如:openssl文件包),然后添加依赖配置。
# 在无网络服务器下进行
vim /etc/ld.so.conf
# 添加缺失依赖文件后,刷新配置
ldconfig
2
3
4
5
依赖配置添加完毕后,重新执行ldd,查看依赖库情况,直到无缺失为止。
③ 替换二进制文件并查看版本
// 在无网络服务器下进行
rm -rf /usr/bin/ssh && ln -sv /usr/local/openssh/bin/ssh /usr/bin/ssh
rm -rf /usr/sbin/sshd && ln -sv /usr/local/openssh/sbin/sshd /usr/sbin/sshd
2
3
④ 检查sshd并重启sshd服务
# 在无网络服务器下进行
# 检查sshd配置
sshd -t
# 重启sshd
systemctl restart sshd
2
3
4
5
6