Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1 完整步骤
注意: ssh升级很容易导致断开连接后无法再连接上,所以升级过程中不要轻易断开连接。
一、准备工作
1. 环境要求
- 系统版本:Ubuntu 22.04
 - OpenSSL 版本:需要 OpenSSL 1.1.1 或更高版本支持
 - 备份要求:务必在升级前进行完整备份,防止升级失败无法回滚
 
2. 依赖包准备(在有网络的环境中操作)
方法一:使用 apt-get download 命令
            
            
              bash
              
              
            
          
          # 创建下载目录
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
            
            
              bash
              
              
            
          
          # 更新软件包列表
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 源码包
            
            
              bash
              
              
            
          
          # 在有网络的环境中下载
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. 解压文件
            
            
              bash
              
              
            
          
          # 创建工作目录
mkdir -p /opt/openssh-upgrade
cd /opt/openssh-upgrade
# 解压离线包
tar -zxvf openssh-offline-packages.tar.gz
# 进入离线包目录
cd offline-packages
        3. 安装依赖包
            
            
              bash
              
              
            
          
          # 安装所有依赖包
cd /opt/openssh-upgrade/offline-packages/ssh_deps
sudo dpkg -i *.deb
# 如果出现依赖问题,尝试修复
sudo apt-get -f install
        4. 备份当前ssh配置
            
            
              bash
              
              
            
          
          # 备份 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
            
            
              bash
              
              
            
          
          # 解压源码包
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. 替换系统二进制文件
            
            
              bash
              
              
            
          
          # 备份原文件并替换为新版本
sudo mv /usr/sbin/sshd /usr/sbin/sshd.bak
sudo cp /usr/local/ssh/sbin/sshd /usr/sbin/sshd
sudo mv /usr/bin/ssh /usr/bin/ssh.bak
sudo cp /usr/local/ssh/bin/ssh /usr/bin/ssh
sudo mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
sudo cp /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
        7. 配置 SSH 服务
            
            
              bash
              
              
            
          
          # 修改配置文件
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 服务并验证
            
            
              bash
              
              
            
          
          # 重启 SSH 服务
sudo systemctl restart ssh
# 验证版本
ssh -V
# 检查服务状态
sudo systemctl status ssh
        三、验证升级结果
1. 版本验证
            
            
              bash
              
              
            
          
          # 查看 SSH 版本
ssh -V
# 应该显示:OpenSSH_9.8p1, OpenSSL 1.1.1  11 Sep 2018
# 查看 SSH 守护进程版本
/usr/sbin/sshd -V
        2. 服务验证
            
            
              bash
              
              
            
          
          # 检查 SSH 服务状态
sudo systemctl status ssh
# 查看 SSH 连接日志
sudo tail -f /var/log/auth.log
        3. 连接测试
            
            
              bash
              
              
            
          
          # 本地连接测试
ssh localhost
# 从其他机器连接测试
ssh -p ssh-port username@server-ip
        四、故障排除
1. 常见问题及解决方案
问题1:编译时缺少依赖
            
            
              bash
              
              
            
          
          # 如果出现 zlib.h missing 错误
sudo apt-get install zlib1g-dev
# 如果出现 libcrypto not found 错误
sudo apt-get install libssl-dev
        问题2:服务启动失败
            
            
              bash
              
              
            
          
          # 查看详细错误信息
sudo journalctl -u ssh -f
# 检查配置文件语法
sudo sshd -t
        问题3:无法连接
            
            
              bash
              
              
            
          
          # 检查防火墙设置
sudo ufw status
sudo ufw allow ssh
# 检查 SSH 端口监听
sudo netstat -tlnp | grep ssh
        五、回滚方案
如果升级失败,可以按照以下步骤回滚:
            
            
              bash
              
              
            
          
          # 停止 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 版本。建议在升级前做好充分备份,并在升级后进行全面测试以确保系统稳定运行。