【Linux】ssh升级到最新版本-以ubuntu为例
前言
相信大家在运维的时候,会扫描到ssh的历史漏洞,这个时候要么对ssh进行升级,要么采用网络白名单的方式解决。
如果是内部扫描的机器,就不能加黑名单了,只能升级。
虽然ssh的漏洞利用难度较高,但是如绿盟rsas的扫描报告都会有很多CVE漏洞,为了满足合规要求,
tips:
- 不要卸载旧版本:不要直接
rpm -e或apt remove现有的 OpenSSH。我们将在新路径下安装新版,并保留旧版作为备用。 - 保留旧 SSH 服务运行:在确认新版配置无误并能正常工作前,让旧的
sshd继续监听默认的 22 端口。 - 新版本使用不同端口测试:先让新版
sshd监听一个临时端口(如 2222),测试成功后再切换。 - 备份现有配置
sudo cp -r /etc/ssh /etc/ssh.bak_$(date +%F)
1:准备编译环境
我的环境是ubuntu 24,
sudo apt update
sudo apt install -y build-essential zlib1g-dev libssl-dev libpam0g-dev libkrb5-dev libedit-dev libselinux1-dev
2.下载源代码
打开这个链接(里面都是稳定版),目测一下,选择下载一个最新的即可:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
比如我是下载10.1,
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.2p1.tar.gz
我们把openssh安装到/usr/local/openssh中,避免与系统的冲突,
# 解压源码
tar -zxvf openssh-10.2p1.tar.gz
cd openssh-10.2p1/# 配置编译选项
./configure \--prefix=/usr/local/openssh \--sysconfdir=/etc/ssh \--with-pam \--with-zlib \--with-ssl-dir=/usr \--with-privsep-path=/var/lib/sshd \--with-privsep-user=sshd
执行结果如下:

3.编译和安装
# 编译
make -j$(nproc)# 安装
sudo make install
5. 创建sshd用户和目录
# 创建sshd用户
sudo useradd -r -s /bin/false -d /var/lib/sshd sshd# 创建必要目录
sudo mkdir -p /var/lib/sshd
sudo chown sshd:sshd /var/lib/sshd
sudo chmod 700 /var/lib/sshd
6. 备份和替换系统文件
# 备份原有文件
sudo cp /usr/bin/ssh /usr/bin/ssh.backup
sudo cp /usr/bin/ssh-keygen /usr/bin/ssh-keygen.backup
sudo cp /usr/sbin/sshd /usr/sbin/sshd.backup# 替换为新版本
sudo cp /usr/local/openssh/bin/ssh /usr/bin/
sudo cp /usr/local/openssh/bin/ssh-keygen /usr/bin/
sudo cp /usr/local/openssh/sbin/sshd /usr/sbin/
7. 更新systemd服务文件
# 编辑ssh服务文件
sudo systemctl edit ssh# 在编辑器中添加以下内容:
[Service]
ExecStart=
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
8. 重启SSH服务
# 重启服务
sudo systemctl restart ssh# 检查服务状态
sudo systemctl status ssh
9. 验证安装
检查版本,输出为10.2,表明已经成功了:
ssh -V

ssh localhost

