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 版本。建议在升级前做好充分备份,并在升级后进行全面测试以确保系统稳定运行。

相关推荐
虾..6 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙6 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
꧁坚持很酷꧂7 小时前
解决虚拟机Ubuntu22.04连接了串口设备但终端没有显示
ubuntu
hkhkhkhkh1238 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen9 小时前
Linux字符串处理
linux·string
张童瑶9 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1239 小时前
什么是SELinux
linux
石小千9 小时前
Linux安装OpenProject
linux·运维
柏木乃一9 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-30909 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu