👨🎓博主简介
💊交流社区: 运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗
文章目录
- 文章声明
- 漏洞描述及风险
- 此文升级是基于8.0p1升级9.8p1
-
- 安装所需依赖
- 安装openssl
- 安装openssh
-
- 查看、备份并卸载原有OpenSSH
- [下载 openssh9.8p1 的安装包:](#下载 openssh9.8p1 的安装包:)
- 解压并编译安装openssh9.8p1
- 复制ssh相关配置文件并添加远程登陆配置
- 启用sshd,生成服务配置文件,并重启服务
- 验证升级是否成功
- 相关专栏
- 相关文章
文章声明
文章声明:此文基于实操撰写 生产环境:此文升级是基于centos8默认的openssh 8.0p1升级9.8p1
ssh -V查看版本是:OpenSSH_8.0p1, OpenSSL 1.1.1k
问题关键字:OpenSSH 升级, OpenSSH 更新, OpenSSH 漏洞修复
漏洞信息:SSH Terrapin 前缀截断漏洞(CVE-2023-48795)
漏洞等级:中级

漏洞描述及风险
SSH Terrapin 前缀截断漏洞(CVE-2023-48795)详细描述:
该漏洞被称为
Terrapin
攻击,是一种中间人攻击。攻击者可以截断 SSH 握手的重要部分,而无需关闭 SSH 连接,从而绕过完整性检查并降低连接的安全性。具体来说,是 SSH Binary Packet Protocol (BPP) 的实现存在缺陷,导致攻击者可以利用精心构造的数据包,在特定条件下截断 SSH 通信内容。
- 影响范围:
OpenSSH < 9.6
- 修复措施:
升级 OpenSSH <= 9.6
风险:
- 升级OpenSSH时,由于远程登录,在卸载OpenSSH后Xshell可能与主机失联。
- 开启多个xshell标签连接同一台主机并开启top命令挂起对话框,减少与主机失联风险。
- 升级OpenSSH以后,会影响免密登录,需重新配置密钥。
- 在升级前一定要备份原有的配置文件,以防出现意外情况。
此文升级是基于8.0p1升级9.8p1
安装所需依赖
bash
yum install -y gcc gcc-c++ make zlib zlib-devel pam-devel perl-IPC-Cmd perl-CPAN openssl-devel
安装openssl
选择安装,并不是必须要安装。
下载并编译安装openssl
下载之后上传到服务器上,进行编译安装。
bash
#解压openssl:
tar -xf openssl-3.3.1.tar.gz -C /usr/src/
# 切换到解压后的路径
cd /usr/src/openssl-3.3.1/
# 设置配置
./config --prefix=/usr/local/openssl -d shared
# 编译安装
make -j4 && make install
# 大约 10-20 分钟左右

备份旧的openssl文件并替换新的
可以先查看目前的openssl版本,然后备份的时候可以根据当前版本号来进行备份。
查看命令:
openssl version
注意:需提前看看目录下有没有这个文件在进行备份。
bash
mv /usr/bin/openssl /usr/bin/openssl-1.1.1k
mv /usr/lib64/openssl /usr/lib64/openssl-1.1.1k
mv /usr/lib64/libssl.so /usr/lib64/libssl.so-1.1.1k
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl
ln -sf /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v
查看openssl版本
bash
[root@localhost lib64]# openssl version
OpenSSL 3.3.1 4 Jun 2024 (Library: OpenSSL 3.3.1 4 Jun 2024)
已经升级到了openssl 3.3.1
版本,没问题。
安装openssh
查看、备份并卸载原有OpenSSH
确保终端一直连接 断开远程连接后就不能连不上了,可以多开几个终端,然后使用top命令持续运行,避免超时退出连接。
bash
# 查看当前安装包
[root@localhost ~]# rpm -qa | grep openssh
openssh-server-8.0p1-10.el8.x86_64
openssh-8.0p1-10.el8.x86_64
openssh-clients-8.0p1-10.el8.x86_64
openssh-askpass-8.0p1-10.el8.x86_64
# 查看当前OpenSSH版本(Centos8 默认使用OpenSSH_8.0p1)
[root@localhost ~]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
# 备份现有的SSH配置及命令
mv /etc/ssh/ /etc/ssh-8.0p1
mv /usr/sbin/sshd /usr/sbin/sshd-8.0p1
mv /usr/bin/ssh /usr/bin/ssh-8.0p1
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen-8.0p1
# 如果您是第一次升级,备份/etc/init.d/sshd时会不存在,不影响后续操作
[root@localhost ~]# mv /etc/init.d/sshd /etc/init.d/sshd-8.0p1
mv: 无法获取'/etc/init.d/sshd' 的文件状态(stat): No such file or directory
# 卸载现有OpenSSH
rpm -e $(rpm -qa| grep openssh) --nodeps
提示移除失败不用担心,因为我们已经给他备份成其他名字了。

下载 openssh9.8p1 的安装包:
- OpenSSH官网:官网下载地址
- 网盘下载地址:https://pan.baidu.com/s/1GoQtsxzQmHfCrxzo8ZYDFg?pwd=open
- CSDN资源下载:centos8默认8.0 升级 openssh9.8p1所需的离线包
bash
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
解压并编译安装openssh9.8p1
bash
#解压openssh:
tar -xf openssh-9.8p1.tar.gz -C /usr/src/
# 切换到解压后的路径
cd /usr/src/openssh-9.8p1/
# 设置配置【二选一】
# 如果需要使用新安装的openssl,就在编译的时候指定openssl安装路径(--with-ssl-dir),在安装完成之后使用ssh -V查看的时候就是openssl-3.3.1。
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl/ --without-openssl-header-check --with-pam --with-privsep-path=/var/lib/sshd --with-md5-passwords --with-zlib
# 默认不指定openssl就使用的是系统自带的openssl-1.1.1k,在安装完成之后使用ssh -V查看的时候就是openssl-1.1.1k。
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir --without-openssl-header-check --with-pam --with-privsep-path=/var/lib/sshd --with-md5-passwords --with-zlib
# 编译安装
make -j4 && make install

复制ssh相关配置文件并添加远程登陆配置
bash
# 复制启动文件到/etc/init.d/下并命名为sshd
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
# 复制命令
cp -rf /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp -rf /usr/local/openssh/bin/ssh /usr/bin/ssh
cp -rf /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
启用sshd,生成服务配置文件,并重启服务
- 使用/etc/init.d/sshd 方式启动服务
bash
#重启sshd服务
/etc/init.d/sshd restart
#查看服务运行状态
/etc/init.d/sshd status
#添加开机启动
chkconfig --add sshd
#查看升级后ssh版本
ssh -V
- 使用systemctl 方式启动服务
bash
# 启用sshd,生成服务启动配置文件
[root@localhost openssh-9.8p1]# systemctl enable sshd
sshd.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig sshd on
# 或者自己写一个也行【二选一】
# 配置service启动文件
vim /etc/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 重启服务
[root@localhost openssh-9.8p1]# systemctl restart sshd
# 查看服务状态
[root@localhost openssh-9.8p1]# systemctl status sshd
验证升级是否成功
bash
[root@localhost openssh-9.8p1]# ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1k FIPS 25 Mar 2021

版本没问题新开窗口再次连接此服务器,可以连上就没问题。