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 命令

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

六、安全建议

  1. 定期更新:定期检查 OpenSSH 的安全更新
  2. 配置优化:根据安全最佳实践配置 SSH
  3. 监控日志:定期检查 SSH 连接日志
  4. 密钥认证:推荐使用 SSH 密钥认证替代密码认证
  5. 防火墙配置:限制 SSH 访问来源 IP

通过以上完整步骤,您可以在 Ubuntu 22.04 系统上成功离线升级 OpenSSH 到 9.8p1 版本。建议在升级前做好充分备份,并在升级后进行全面测试以确保系统稳定运行。

相关推荐
xiaoye-duck15 分钟前
《Linux 网络编程》深入理解数据链路层:从MAC帧到ARP协议的底层原理详解
linux·网络
QQ142207844926 分钟前
2012 年的老 ThinkPad E430 改装 Ubuntu 24.04全程翻车排查实录
ubuntu·项目复盘
阿钱真强道36 分钟前
06 嵌入式操作系统 | vim 与软件管理:apt / 源码编译
ubuntu·vim·嵌入式·apt·源码编译
demo007x1 小时前
我用 AI 做了一个跨平台的PopClip:拾趣Magpie
程序员·github·ai编程
j7~1 小时前
【Linux 网络】四十.《网络基础(传输层协议:UDP、TCP)》--中篇
linux·tcp·tcp协议·确认应答机制·连接管理机制·tcp流量控制
牢姐与蒯1 小时前
Linux进程间通信(三).基于匿名管道的进程池的实现
linux·运维·服务器·ubuntu
miofly1 小时前
GitHub 日榜趋势速报 | 2026-09-22
开源·github
凤年徐1 小时前
C++ 仿 muduo 高并发服务器:用户态缓冲区 Buffer 模块实现
linux·c++
Java红桃峰峰日拱一卒3 小时前
在jdk8的centos上安装jdk17
linux·jdk17·jdk8
M78佐菲9 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习