OpenSSL 与 OpenSSH 离线升级至最新版本 9.9p2
一、前言
在网络安全日益重要的今天,保持系统中的 OpenSSL 和 OpenSSH 为最新版本是至关重要的。然而,在一些内网环境中,由于网络限制,无法直接从互联网上下载最新的软件包进行升级。本文将详细介绍如何在离线环境下将 OpenSSL 和 OpenSSH 升级到最新版本 9.9p2。
二、准备工作
2.1 下载所需软件包
https://wwyq.lanzouo.com/iQD0730558gd
在有网络的环境中,下载以下软件包:
xinetd-2.3.15-14.el7.x86_64.rpm
telnet-0.17-64.el7.x86_64.rpm
telnet-server-0.17-64.el7.x86_64.rpm
openssl-1.1.1w.tar.gz
openssh-9.9p2-offline.tar.gz
2.2 上传软件包
将下载好的软件包上传到内网机的相应目录,例如:
xinetd
、telnet
相关的rpm
包上传到内网机任意可访问目录。openssl-1.1.1w.tar.gz
上传到/root/ssh_upgrade
目录。openssh-9.9p2-offline.tar.gz
上传到/root/sshupdate
目录。
三、安装 Telnet 服务
安装 Telnet 服务是为了避免在 SSH 升级失败时无法进行远程连接。
# 安装 xinetd
rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
# 安装 telnet
rpm -ivh telnet-0.17-64.el7.x86_64.rpm
# 安装 telnet 服务端
rpm -ivh telnet-server-0.17-64.el7.x86_64.rpm
# 编辑 Telnet 服务配置文件
vi /etc/xinetd.d/telnet
在 vi
编辑器中,输入以下内容:
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no # 关键:启用 Telnet 服务
}
保存并退出 vi
编辑器,然后启动 xinetd
服务并设置开机自启:
systemctl start xinetd # 启动服务
systemctl enable xinetd # 设置开机自启
注意:需要放开 23 端口的防火墙富规则配置。
四、升级 OpenSSL
# 进入 OpenSSL 升级目录
cd /root/ssh_upgrade
# 备份旧的 OpenSSL 目录
cp -a /usr/local/openssl /media/openssl
# 解压 OpenSSL 压缩包
tar -zxvf openssl-1.1.1w.tar.gz -C /usr/local/ # 解压到 /usr/local/openssl 目录
# 配置系统库路径
echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1w.conf
# 刷新系统库缓存
ldconfig
# 备份旧的 OpenSSL 命令
mv /usr/bin/openssl /usr/bin/openssl.old
# 创建新的 OpenSSL 命令软链接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 验证 OpenSSL 版本
openssl version # 应输出:OpenSSL 1.1.1w xxxxxx
# 验证系统库中 libssl 路径
ldconfig -p | grep libssl # 应显示 /usr/local/openssl/lib/libssl.so.1.1
五、升级 OpenSSH
5.1 前期准备
5.1.1 上传安装包
确保 openssh-9.9p2-offline.tar.gz
已上传到 /root/sshupdate
目录,并且包内包含完整文件,如 usr/bin/ssh
、usr/sbin/sshd
、usr/libexec/sshd-session
等。
5.1.2 备份旧版本文件
# 备份配置文件
mkdir -p /opt/openssh_backup/etc_ssh
cp -r /etc/ssh/* /opt/openssh_backup/etc_ssh/
# 备份二进制文件
mkdir -p /opt/openssh_backup/bin
cp /usr/bin/ssh /opt/openssh_backup/bin/
cp /usr/bin/scp /opt/openssh_backup/bin/
cp /usr/bin/sftp /opt/openssh_backup/bin/
cp /usr/sbin/sshd /opt/openssh_backup/bin/
5.2 解压并替换 OpenSSH 文件
# 进入解压目录
cd /root/sshupdate
# 解压安装包
tar -zxvf openssh-9.9p2-offline.tar.gz
# 进入解压后的目录
cd openssh-package
# 替换客户端工具
cp -f ./usr/bin/ssh /usr/bin/
cp -f ./usr/bin/scp /usr/bin/
cp -f ./usr/bin/sftp /usr/bin/
cp -f ./usr/bin/ssh-keygen /usr/bin/
# 替换服务端程序
cp -f ./usr/sbin/sshd /usr/sbin/
# 替换会话管理程序(解决 "sshd-session不存在" 报错)
cp -f ./usr/libexec/sshd-session /usr/libexec/
# 替换配置文件
cp -f ./etc/ssh/sshd_config /etc/ssh/
cp -f ./etc/ssh/ssh_config /etc/ssh/
5.3 修复权限
# 修复配置文件权限
chmod 600 /etc/ssh/sshd_config # 严格权限,否则启动失败
chmod 644 /etc/ssh/ssh_config
# 修复密钥文件权限(解决 "UNPROTECTED PRIVATE KEY" 报错)
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
chmod 644 /etc/ssh/ssh_host_*_key.pub # 公钥权限
# 修复程序文件权限
chmod 755 /usr/sbin/sshd
chmod 755 /usr/bin/ssh
chmod 755 /usr/libexec/sshd-session # 确保可执行
# 创建权限分离目录(解决 "Missing privilege separation directory" 报错)
mkdir -p /var/lib/sshd
chmod 755 /var/lib/sshd
chown root:root /var/lib/sshd
5.4 启动服务并验证
# 检查配置文件语法
/usr/sbin/sshd -t # 无输出则配置正确
# 重启 sshd 服务
systemctl daemon-reload
systemctl restart sshd
# 验证服务状态
systemctl status sshd # 应显示 "active (running)"
# 验证版本
ssh -V # 应显示 "OpenSSH_9.9p2"
sshd -V # 应显示 "OpenSSH_9.9p2"
# 测试连接
ssh localhost # 能正常登录即完成升级
5.5 回滚方案(若升级失败)
# 恢复配置文件
cp -r /opt/openssh_backup/etc_ssh/* /etc/ssh/
# 恢复二进制文件
cp /opt/openssh_backup/bin/ssh /usr/bin/
cp /opt/openssh_backup/bin/scp /usr/bin/
cp /opt/openssh_backup/bin/sftp /usr/bin/
cp /opt/openssh_backup/bin/sshd /usr/sbin/
# 重启服务
systemctl restart sshd
六、总结
通过以上步骤,我们可以在离线环境下成功将 OpenSSL 和 OpenSSH 升级到最新版本 9.9p2。同时,为了应对可能出现的升级失败情况,我们还提供了回滚方案,确保系统的稳定性和可用性。
希望本文对你有所帮助,如果你在升级过程中遇到任何问题,欢迎在评论区留言讨论。
注意:实际操作中,请根据你的系统环境和需求进行适当调整。