【转载】升级OpenSSH的正确姿势!!!

本文转载自GoodBoyboy 's Blog|惬意小屋-点滴记忆

已获得来自站长的转载授权许可

在近期也会针对上一篇文章中的问题进行勘误修正,在此处感谢好友的指出说明

原文地址:https://blog.goodboyboy.top/posts/1937457134.html
注:本文转载时针对格式进行了部分微调,内容基本保持和原文一致

最近 OpenSSH CVE-2024-6387 闹得沸沸扬扬,网上也流传出了升级教程,但有些教程是错误的!!!

错误做法

错误示例:只 make install 后就不管了

这里 make install 完后需要替换二进制文件才能真正完成升级!!!

当然有些人可能会说为什么我 make install 后使用 sshd -V 输出版本号是 9.8p1,那是因为环境变量的锅!!!

检查方法很简单

输入 ls /usr/local/sbin -la | grep sshd 可以发现该二进制文件是 make install 时生成的(日期),然后输入 ls /usr/sbin -la | grep sshd ,可以发现这个 sshd 文件创建日期远落后于第一个 sshd 文件(当然你也可以通过绝对路径运行 /usr/sbin/sshd -V 输出版本信息查看)

接着我们输入 ps aux | grep sshd 可以发现当前正在运行的是 /usr/sbin 下的 sshd!!!

并且通过 cat /etc/systemd/system/sshd.service 也可以看出 sshd 服务是使用的 /usr/sbin 下的 sshd,跟新版本的 sshd 半毛钱关系没有!!!

人话来说就是如升

原因分析:环境变量的锅

输入 echo $PATH 可以看到自己当前的环境变量

这是我的环境变量: /bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

我也不知道是 make install 时添加了环境变量还是我之前自己添加了环境变量,导致当我输入 sshd -V 时系统将文件定位到了 /usr/local/sbin 目录下的 sshd, ssh -V 则定位到了 /usr/local/bin 下的 ssh 二进制文件,因此输出了 9.8p1 的版本信息,让我误以为升级完成(网上部分教程害人不浅),但其实根本没有完成升级!!

Tips:部分教程用 ssh -V 输出版本信息, ssh 是客户端, sshd 才是服务端

正确做法

前面的步骤都是一样的

sudo apt-get update
sudo apt-get install -y build-essential zlib1g-dev libssl-dev

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1

./configure
make
sudo make install

然后这里我们需要替换二进制文件

这里因为我使用软连接好像有点问题因此选择直接把二进制文件 copy 过来(这里先把 sshd 的写了,openssh 其他组件可以依葫芦画瓢进行替换)

#备份原来的sshd
mv /usr/sbin/sshd /usr/sbin/sshd.old
#复制二进制文件
cp /usr/local/sbin/sshd /usr/sbin/sshd
#重启sshd服务
sudo systemctl restart sshd

重新连接后会提示密钥指纹变更的情况,同意接受即可

下面是可选更新组件

#备份原来的组件
mv /usr/bin/ssh /usr/bin/ssh.old

mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.old

#更新ssh客户端
cp /usr/local/bin/ssh /usr/bin/ssh
#更新密钥生成组件
cp /usr/local/bin/ssh-keygen /usr/bin/ssh-keygen
点赞

赞助商广告

如果您的网络和设备条件允许,这里可能会显示来自Google和其他赞助商的广告

发表回复

电子邮件地址不会被公开。必填项已用 * 标注