方法一:通过 yum 升级(推荐)
1. 检查当前版本和可用版本
ssh -V
yum info openssh
2. 查看可用更新
yum check-update openssh*
3. 升级 OpenSSH
# 备份配置文件
cp -r /etc/ssh /etc/ssh.bak
# 升级所有组件
yum update openssh openssh-server openssh-clients openssh-askpass
4. 重启服务
systemctl restart sshd
systemctl status sshd
方法二:编译安装最新版本
当需要安装比仓库更新的版本时:
1. 准备工作
# 安装编译依赖
yum groupinstall "Development Tools" -y
yum install zlib-devel openssl-devel pam-devel libselinux-devel -y
# 备份现有配置
cp -r /etc/ssh /etc/ssh.backup
systemctl stop sshd
2. 下载和编译
# 查看最新版本:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar -zxvf openssh-9.7p1.tar.gz
cd openssh-9.7p1
# 配置和编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr --with-md5-passwords
make
3. 安装和配置
# 备份旧版本
mv /usr/bin/ssh /usr/bin/ssh.old
mv /usr/sbin/sshd /usr/sbin/sshd.old
# 安装新版本
make install
# 恢复配置文件(使用备份的配置)
cp /etc/ssh.backup/sshd_config /etc/ssh/sshd_config
4. 更新服务配置
# 更新 systemd 服务文件
cp /usr/local/src/openssh-9.7p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
# 或使用原有服务文件
systemctl daemon-reload
5. 启动服务
systemctl start sshd
systemctl enable sshd
ssh -V
方法三:使用第三方仓库(如 EPEL)
# 安装 EPEL 仓库
yum install epel-release -y
# 升级 OpenSSH
yum update openssh* --enablerepo=epel
重要注意事项
1. 升级前的准备工作
# 确保有控制台访问权限
# 开启第二个终端会话测试连接
# 备份所有重要数据
tar -czf ssh_backup_$(date +%Y%m%d).tar.gz /etc/ssh /usr/bin/ssh* /usr/sbin/sshd*
2. 配置注意事项
# 检查配置文件差异
diff /etc/ssh/sshd_config /etc/ssh.bak/sshd_config
# 常见需要手动合并的配置:
# PermitRootLogin
# PasswordAuthentication
# Port
# AllowUsers/DenyUsers
3. 故障排查
# 检查配置语法
sshd -t
# 查看详细日志
journalctl -u sshd -f
tail -f /var/log/secure
# 测试配置而不重启
sshd -T
4. 安全加固建议
升级后考虑:
# 禁用不安全的协议
echo "Protocol 2" >> /etc/ssh/sshd_config
# 禁用弱密码算法
echo "KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256" >> /etc/ssh/sshd_config
回滚方案
如果升级失败:
# 停止服务
systemctl stop sshd
# 恢复备份
cp -r /etc/ssh.backup/* /etc/ssh/
# 恢复旧版本二进制文件(如果编译安装)
mv /usr/bin/ssh.old /usr/bin/ssh
mv /usr/sbin/sshd.old /usr/sbin/sshd
# 重启服务
systemctl start sshd
验证升级
# 检查版本
ssh -V
# 测试连接
ssh -o BatchMode=yes -o ConnectTimeout=5 localhost echo "SSH升级成功"
# 检查服务状态
systemctl status sshd
建议:对于生产环境,先在测试服务器上验证升级过程,确保兼容性和稳定性。使用 yum 升级是最安全的方式,编译安装适合需要最新安全补丁的场景。