前言:

在出现openssh 安全漏洞(cve-2023-38408) 漏洞的时候最简单就是升级openSSH服务到9.+。 

本文将会详细介绍如何升级到openSSH9.+,以及升级前,升级过程中,升级后要注意的事项。

本实验的操作系统为: OpenEuler22.04. 

升级前准备工作

通过命令查看目前系统的ssh和sshd版本:

[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Nov 2023

注意:由于ssh是远程连接服务器的功能,在j进行下面操作升级openssh前,请打开多个连接会话使用 top 保持链接,如升级失败,可通过已连接的会话进行回滚操作。

开始升级

1. 安装操作系统依赖包:

yum install -y telnet gcc zlib-devel

2. 下载软件包

openssl下载地址:/source/old/index.html

openssh下载地址:Index of /pub/OpenBSD/OpenSSH/portable/

3. 编译升级

3.1 编译升级openssl-3.5.0-beta1

进入到openssl-3.5.0-beta1tar.gz文件所在的目录,执行编译安装命令:

tar -xzvf openssl-3.5.0-beta1.tar.gz
cd openssl-3.5.0-beta1
mkdir -p /usr/openssh/openssl-3.5.0-beta1
./config --prefix=/usr/openssh/openssl-3.5.0-beta1
make
make install
ll /usr/openssh/openssl-3.5.0-beta1
cd ..
rm -rf openssl-3.5.0-beta1

编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:

export LD_LIBRARY_PATH=/usr/openssh/openssl-3.5.0-beta1/lib:$LD_LIBRARY_PATH
export PATH=/usr/openssh/openssh-9.9p2/bin:/usr/openssh/openssh-9.9p2/sbin:/usr/openssh/openssl-3.5.0-beta1/bin:$PATH

保存配置退出后,然后执行如下命令,确认openssl版本为openssl-3.5.0-beta1:

source /etc/profile
openssl version
3.2 编译升级openssh-9.9p2

进入到openssh-9.9p2.tar.gz文件所在的目录,执行编译安装命令:

tar -xzvf openssh-9.9p2.tar.gz
cd openssh-9.9p2
mkdir -p /usr/openssh/openssh-9.9p2
./configure --prefix=/usr/openssh/openssh-9.9p2 --with-ssl-dir=/usr/openssh/openssl-3.5.0-beta1
make
make install

修改配置文件:

vi /usr/openssh/openssh-9.9p2/etc/sshd_config

允许root登录,默认值prohibit-password表示root用户只能通过公私钥的方式登录,不能以密码的方式登录

PermitRootLogin yes

创建sshd服务自启动文件:

vi /usr/lib/systemd/system/sshd9.service

文件内容添加如下内容:

[Unit]
Description=OpenSSH server daemon
After=network.target
[Service]
Type=simple
Environment=LD_LIBRARY_PATH=/usr/openssh/openssl-3.5.0-beta1/lib
ExecStart=/usr/openssh/openssh-9.9p2/sbin/sshd -D -f /usr/openssh/openssh-9.9p2/etc/sshd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

停用原sshd服务,并备份相关文件

systemctl stop sshd.service
systemctl disable sshd.service

备份文件:

mkdir /home/ssh-old-bak
mv /etc/ssh /home/ssh-old-bak/
mv /usr/sbin/sshd /home/ssh-old-bak/
mv /usr/lib/systemd/system/sshd-keygen.service /home/ssh-old-bak/
mv /usr/lib/systemd/system/sshd.service /home/ssh-old-bak/
mv /usr/lib/systemd/system/sshd@.service /home/ssh-old-bak/
mv /usr/lib/systemd/system/sshd.socket /home/ssh-old-bak/

启动新的sshd服务

systemctl daemon-reload
systemctl start sshd9.service
systemctl status sshd9.service
systemctl enable sshd9.service

测试验证

重新连接一个新的窗口来测试新sshd是否可以正常连接,并测试版本号,最后重启服务器测试是否可以重启成功。

[root@10 ~]# ssh -V
OpenSSH_9.9p2, OpenSSL 3.5.0 8 Apr 2025

到此你就升级完成了。

如果您之前做过ssh免密钥,那升级完成之后您可能会报如下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:9mtnXA20j09FBL5aPvCwXSPY09a/SeQkMoxU9dNIuAE. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /root/.ssh/known_hosts:9 Host key for 10.8.2.113 has changed and you have requested strict checking. Host key verification failed.

这个问题是主机密钥变化 更新了 OpenSSH 到 9. + 版本后,新的 OpenSSH 可能重新生成了主机密钥,旧的就过期了,我们只需要清理一下旧的密钥,更新一份即可;执行如下命令:

ssh-keygen -R [your_ip]

跳过已有密钥检查:如果你确定需要重新复制公钥,可以使用 -f 选项强制复制,覆盖远程主机上已存在的密钥

ssh-copy-id -f [your_ip]

确认远程授权密钥: 登录到远程主机并检查 ~/.ssh/authorized_keys 文件,以确认你的公钥是否已经存在。如果有误可以手动编辑或删除不正确的条目即可解决。

更多推荐