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

相关推荐
徐子元竟然被占了!!7 小时前
Linux的df和du
linux·运维·服务器
集大周杰伦7 小时前
Linux网络编程核心实践:TCP/UDP socket与epoll高并发服务器构建
linux·tcp/ip·网络编程·socket·字节序·套接字·i/o多路复用
Mr. Cao code7 小时前
实战:Docker构建Haproxy负载均衡镜像
linux·运维·ubuntu·docker·容器·负载均衡
大聪明-PLUS7 小时前
3 个诊断 Linux 服务器的脚本
linux·嵌入式·arm·smarc
@木辛梓7 小时前
Linux 线程
linux·开发语言·c++
门前灯7 小时前
Linux系统之pkg-config 命令详解
linux·运维·服务器·pkg-config
fruge8 小时前
GitHub Actions CI/CD 自动化部署完全指南
ci/cd·自动化·github
fpcc8 小时前
C++编程实践——eventFD
linux·c++
虚伪的空想家8 小时前
ip网段扫描机器shell脚本
android·linux·网络协议·tcp/ip·shell·脚本·network