Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1
Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1 完整步骤
注意: ssh升级很容易导致断开连接后无法再连接上,所以升级过程中不要轻易断开连接。
一、准备工作
1. 环境要求
- 系统版本:Ubuntu 22.04
 - OpenSSL 版本:需要 OpenSSL 1.1.1 或更高版本支持
 - 备份要求:务必在升级前进行完整备份,防止升级失败无法回滚
 
2. 依赖包准备(在有网络的环境中操作)
方法一:使用 apt-get download 命令
# 创建下载目录
mkdir -p ~/offline-packages
mkdir -p ~/offline-packages/ssh_deps
cd ~/offline-packages# 下载所有依赖包
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances openssh-server | grep "^\w" | sort -u)# 下载编译工具依赖
sudo apt-get download build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libaudit-dev libkrb5-dev libgss-dev libwrap0-dev
方法二:使用 apt-get --download-only
# 更新软件包列表
sudo apt-get update# 只下载不安装
sudo apt-get install --download-only build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libaudit-dev libkrb5-dev libgss-dev libwrap0-dev# 将下载的包复制到离线包目录
cp /var/cache/apt/archives/*.deb ~/offline-packages/ssh_deps
注:如果系统满足依赖要求,则可以不用再进行该步骤依赖包的升级
3. 下载 OpenSSH 9.8p1 源码包
# 在有网络的环境中下载
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz# 将源码包和依赖包一起打包
tar -czvf openssh-offline-packages.tar.gz ~/offline-packages/ openssh-9.8p1.tar.gz
二、离线升级步骤
1. 传输文件到目标服务器
将打包好的 openssh-offline-packages.tar.gz 文件通过U盘或其他方式传输到目标服务器。
2. 解压文件
# 创建工作目录
mkdir -p /opt/openssh-upgrade
cd /opt/openssh-upgrade# 解压离线包
tar -zxvf openssh-offline-packages.tar.gz# 进入离线包目录
cd offline-packages
3. 安装依赖包
# 安装所有依赖包
cd /opt/openssh-upgrade/offline-packages/ssh_deps
sudo dpkg -i *.deb# 如果出现依赖问题,尝试修复
sudo apt-get -f install
4. 备份当前ssh配置
# 备份 SSH 配置文件
sudo cp -r /etc/ssh /etc/ssh.backup
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.backup# 备份二进制文件
sudo cp /usr/sbin/sshd /usr/sbin/sshd.backup
sudo cp /usr/bin/ssh /usr/bin/ssh.backup
sudo cp /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
5. 编译安装 OpenSSH 9.8p1
# 解压源码包
cd /opt/openssh-upgrade
tar -zxvf openssh-9.8p1.tar.gz
cd openssh-9.8p1# 配置编译选项
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --without-hardening# 编译并安装
make -j$(nproc)
sudo make install
6. 替换系统二进制文件
# 备份原文件并替换为新版本
sudo mv /usr/sbin/sshd /usr/sbin/sshd.bak
sudo cp /usr/local/ssh/sbin/sshd /usr/sbin/sshdsudo mv /usr/bin/ssh /usr/bin/ssh.bak
sudo cp /usr/local/ssh/bin/ssh /usr/bin/sshsudo mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
sudo cp /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
7. 配置 SSH 服务
# 修改配置文件
echo "X11Forwarding yes" >> /etc/ssh/sshd_config
echo "X11UseLocalhost no" >> /etc/ssh/sshd_config
echo "XAuthLocation /usr/bin/xauth" >> /etc/ssh/sshd_config
echo "UseDNS no" >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
注:注意检查ssh端口,需要修改端口跟原来ssh用的端口保持一致。
8. 重启 SSH 服务并验证
# 重启 SSH 服务
sudo systemctl restart ssh# 验证版本
ssh -V# 检查服务状态
sudo systemctl status ssh
三、验证升级结果
1. 版本验证
# 查看 SSH 版本
ssh -V
# 应该显示:OpenSSH_9.8p1, OpenSSL 1.1.1  11 Sep 2018# 查看 SSH 守护进程版本
/usr/sbin/sshd -V
2. 服务验证
# 检查 SSH 服务状态
sudo systemctl status ssh# 查看 SSH 连接日志
sudo tail -f /var/log/auth.log
3. 连接测试
# 本地连接测试
ssh localhost# 从其他机器连接测试
ssh -p ssh-port username@server-ip
四、故障排除
1. 常见问题及解决方案
问题1:编译时缺少依赖
# 如果出现 zlib.h missing 错误
sudo apt-get install zlib1g-dev# 如果出现 libcrypto not found 错误
sudo apt-get install libssl-dev
问题2:服务启动失败
# 查看详细错误信息
sudo journalctl -u ssh -f# 检查配置文件语法
sudo sshd -t
问题3:无法连接
# 检查防火墙设置
sudo ufw status
sudo ufw allow ssh# 检查 SSH 端口监听
sudo netstat -tlnp | grep ssh
五、回滚方案
如果升级失败,可以按照以下步骤回滚:
# 停止 SSH 服务
sudo systemctl stop ssh# 恢复备份文件
sudo cp -r /etc/ssh.backup/* /etc/ssh/
sudo cp /etc/pam.d/sshd.backup /etc/pam.d/sshd
sudo cp /usr/sbin/sshd.backup /usr/sbin/sshd
sudo cp /usr/bin/ssh.backup /usr/bin/ssh
sudo cp /usr/bin/ssh-keygen.bak /usr/bin/ssh-keygen# 重启 SSH 服务
sudo systemctl start ssh
六、安全建议
- 定期更新:定期检查 OpenSSH 的安全更新
 - 配置优化:根据安全最佳实践配置 SSH
 - 监控日志:定期检查 SSH 连接日志
 - 密钥认证:推荐使用 SSH 密钥认证替代密码认证
 - 防火墙配置:限制 SSH 访问来源 IP
 
通过以上完整步骤,您可以在 Ubuntu 22.04 系统上成功离线升级 OpenSSH 到 9.8p1 版本。建议在升级前做好充分备份,并在升级后进行全面测试以确保系统稳定运行。
