目 录CONTENT

文章目录

Centos7升级SSH版本解决SSH漏洞

yyzq
2025-03-27 / 0 评论 / 2 点赞 / 107 阅读 / 2,889 字

漏洞名称


解决方法

将
OpenSSH9.0
升级到
OpenSSH9.9
解决漏洞
将
openssl/1.1.1q
升级到
openssl/1.1.1w

以上是我最近在生产环境升级了一次SSH的经验

1.前言

我的系统为centos7系统,X86架构,纯内网环境,没有yum源,SSH需要升级版本解决OpenSSH9.0与openssl/1.1.1q漏洞,但是升级SSH会带来一些风险,因此写下具体的升级步骤,仅供参考,禁止直接照搬生产环境,风险自负,注意本教程只是演示升级步骤,centos7系统为老项目的系统,因为这个系统已经停止更新了,现在新项目一般都不使用这个系统了。

2.风险提示

安全性:确保升级过程中不会影响现有连接,避免远程 SSH 断连导致无法访问服务器。

兼容性:检查新版本 SSH 是否与现有配置和依赖兼容。

备份:升级前备份 sshd_config 及相关配置文件,以防出错可以回滚。

测试:升级后先使用 ssh -v 测试连接,确保没有认证或协议问题。

日志检查:查看 /var/log/auth.log 或 journalctl -u ssh 以确认 SSH 是否正常运行。

3.演示服务器

我们使用莱卡云
需要vps的可以看以下信息
莱卡云官网
ssh版本如下

ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

4.前置条件

1.系统为centos7系统
2.需要做好yum源,也可以做本地yum源
3.为了避免升级失败ssh进入不了服务器可以先安装telnet,在升级ssh
4.安装好必要的依赖

4.常用附件

1.centos7系统镜像

点击链接下载CentOS-7-x86_64-DVD-2009.iso文件

wget -O CentOS-7-x86_64-DVD-2009.iso  https://mirrors.aliyun.com/centos-vault/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

2.常用的rpm包

【附件】需要的附件

官方版本下载

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz  # 如需升级OpenSSL

升级开始

一、配置本地yum

如果已经有yum源的跳过本步骤

1.1将系统镜像放置到系统的/usr/local/src目录中

比如这样(系统名称是这个CentOS-7-x86_64-DVD-2009.iso)

[root@smptmp src]# ll
total 4364408
-rw-r--r-- 1 root root 4469153792 Mar 25 17:14 CentOS-7-x86_64-DVD-2009.iso
[root@smptmp src]# pwd
/usr/local/src
[root@smptmp src]#

系统的绝对路径是这个

/usr/local/src/CentOS-7-x86_64-DVD-2009.iso

1.2.新建目录

mkdir /mnt/cdrom

1.3.挂载镜像到目录

echo '/usr/local/src/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom  iso9660 defaults,ro,loop 0 0' >> /etc/fstab

1.4挂载

挂载

mount -a

卸载是这个命令(如果需要的话)

umount /mnt/cdrom

查看是否挂载成功

df -h

可以看到挂载成功

[root@centos src]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 736M     0  736M    0% /dev
tmpfs                    748M     0  748M    0% /dev/shm
tmpfs                    748M  8.5M  739M    2% /run
tmpfs                    748M     0  748M    0% /sys/fs/cgroup
/dev/mapper/centos-root   46G  6.8G   40G   15% /
/dev/sda1               1014M  138M  877M   14% /boot
tmpfs                    150M     0  150M    0% /run/user/0
/dev/loop0               4.4G  4.4G     0  100% /mnt/cdrom    #打印此行信息即为挂载成功

切换到/etc/yum.repos.d/目录

cd /etc/yum.repos.d/

创建yum源备份目录

mkdir repo_backup

将所有系统自带的yum仓库配置文件移动到yum源备份目录(默认其他都不使用了)

mv *.repo repo_backup/

配置centos7.repo的yum源

vi centos7.repo

按键盘中 i 键进入vi的编辑模式,复制粘贴以下五行配置到文件中:

[base]
name=centos7
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1

粘贴后按键盘中 Esc 键退出编辑模式
回车保存修改并退出文件编辑

:wq!

清除yum源缓存

yum clean all

重新生成yum缓存

yum makecache

查看是否成功
列出已启用的 YUM 软件仓库(repositories)

yum repolist

安装测试

yum -y install vim

二、安装telnet

安装这个是为了怕万一升级ssh失败登录不了服务器
创建新目录

mkdir -p /home/setup/ssh-update

然后将下载好的附件都放入此目录,(这里应该有7个文件)

ll
总用量 12096
-rw-r--r--. 1 root root   79376 3月  25 16:01 lrzsz-0.12.20-36.el7.x86_64.rpm
-rw-r--r--. 1 root root 1964864 3月  25 16:01 openssh-9.9p1.tar.gz
-rw-r--r--. 1 root root 9893384 3月  25 16:01 openssl-1.1.1w.tar.gz
-rw-r--r--. 1 root root  189124 3月  25 16:01 pam-devel-1.1.8-23.el7.x86_64.rpm
-rw-r--r--. 1 root root   65632 3月  25 16:01 telnet-0.17-64.el7.x86_64.rpm
-rw-r--r--. 1 root root   41804 3月  25 16:01 telnet-server-0.17-64.el7.x86_64.rpm
-rw-r--r--. 1 root root  131484 3月  25 16:01 xinetd-2.3.15-14.el7.x86_64.rpm

执行以下命令

cd /home/setup/ssh-update/
rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
rpm -ivh telnet-0.17-64.el7.x86_64.rpm
rpm -ivh telnet-server-0.17-64.el7.x86_64.rpm
rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm --force --nodeps

启动telnet

service xinetd start
systemctl start telnet.socket

查看telnet状态

service xinetd status
systemctl status telnet.socket

查看是否启动成功

ss -tunlp|grep 23

检查防火墙是否开启,如果开启将防火墙关闭

systemctl stop firewalld

Selinux也关闭(如果开了的话)

setenforce 0

允许root使用telnet登录

echo "pts/0" >> /etc/securetty
echo "pts/1" >> /etc/securetty
echo "pts/2" >> /etc/securetty
echo "pts/3" >> /etc/securetty

用另一台服务器尝试是否可以使用telnet登录

telnet ip 23

如果root无法登录可以看下日志是什么原因
查看日志定位问题
在服务器上检查日志:

tail -f /var/log/secure

默认添加了pts/0-pts/3可能还需要添加具体查看日志

保证正常可以登录,避免出现ssh无法登录的问题

三、安装必要的依赖

这里建议一个一个安装哪个没安装成功,单独解决哪个的问题

yum -y install gcc make autoconf automake 
yum -y install zlib-devel openssl-devel pam-devel 
yum -y install libselinux-devel libsepol-devel 
yum -y install krb5-devel libedit-devel 
yum -y install libpcap libpcap-devel

解释各个依赖的作用

gcc:编译器,必须安装。

make:编译工具,用于执行 Makefile。

autoconf & automake:自动配置编译环境。

zlib-devel:提供数据压缩功能,OpenSSH 需要它。

openssl-devel:用于支持 SSH 连接加密。

pam-devel:启用 PAM(Pluggable Authentication Module)身份认证功能。

libselinux-devel & libsepol-devel:用于 SELinux 支持(如果系统启用了 SELinux)。

krb5-devel:用于 Kerberos 认证(可选)。

libedit-devel:支持命令行编辑(可选)。

libpcap & libpcap-devel:提供数据包捕获功能(一般用于安全分析工具,不是 OpenSSH 必需的)。

++++++++++++++++++++++++++++++++++++++++++++++
可能出现的问题
如果失败可能是版本不一致
降级 zlib 到匹配版本

yum downgrade zlib-1.2.7-17.el7

然后重新安装 zlib-devel:

yum install zlib-devel

++++++++++++++++++++++++++++++++++++++++++++++

四、安装openssl

第一步

此时在这个目录

cd /home/setup/ssh-update

将新版的文件放置到这里

ll
总用量 12096
-rw-r--r--. 1 root root   79376 3月  25 16:01 lrzsz-0.12.20-36.el7.x86_64.rpm
-rw-r--r--. 1 root root 1964864 3月  25 16:01 openssh-9.9p1.tar.gz
-rw-r--r--. 1 root root 9893384 3月  25 16:01 openssl-1.1.1w.tar.gz
-rw-r--r--. 1 root root  189124 3月  25 16:01 pam-devel-1.1.8-23.el7.x86_64.rpm
-rw-r--r--. 1 root root   65632 3月  25 16:01 telnet-0.17-64.el7.x86_64.rpm
-rw-r--r--. 1 root root   41804 3月  25 16:01 telnet-server-0.17-64.el7.x86_64.rpm
-rw-r--r--. 1 root root  131484 3月  25 16:01 xinetd-2.3.15-14.el7.x86_64.rpm
cp -rf /etc/ssh /etc/ssh.bak20250325
tar zxvf openssl-1.1.1w.tar.gz
cd /home/setup/ssh-update/openssl-1.1.1w
openssl version
mv /usr/bin/openssl /usr/bin/openssl_bak20250325
mv /usr/include/openssl /usr/include/openssl_bak20250325
./config shared --prefix=/usr/local/openssl shared enable-ssl3 enable-ssl3-method no-zlib && make && make install
echo $?

以上返回0代表正常

第二步

mv /usr/bin/openssl /usr/bin/openssl_bak20250325
mv /usr/include/openssl /usr/include/openssl_bak20250325
mv /usr/lib64/libssl.so  /usr/lib64/libssl.so_bak20250325
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/lib" >> /etc/ld.so.conf  
ldconfig -v 
ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 
ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 

++++++++++++++++++++++++++++++++++++++++++++++
这个步骤可以先不要执行
( 有时候 会有版本跟库版本不一直情况,执行完下边在执行一次上边
ln -sf /usr/local/openssl/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/openssl/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

++++++++++++++++++++++++++++++++++++++++++++++

第三步

/sbin/ldconfig
openssl version

五、SSH升级

第四步

cd ..
tar zxvf openssh-9.9p1.tar.gz
chown -R root.root /home/setup/ssh-update/openssh-9.9p1
cd /home/setup/ssh-update/openssh-9.9p1
rm -rf /etc/ssh/*
./configure --prefix=/usr/ --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/openssl/include  --with-ssl-dir=/usr/local/openssl   --with-zlib   --with-md5-passwords   --with-pam  && make && make install
echo $?

以上返回0代表正常

第五步

cp -irf contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod 755 /usr/bin/ssh
chmod 755 /usr/bin/sftp
chmod 755 /usr/bin/scp
chmod +x /etc/init.d/sshd
chkconfig --add sshd
mv  /usr/lib/systemd/system/sshd.service  /home/setup/ssh-update/
chkconfig sshd on
ssh -V

出现以下说明升级成功
OpenSSH_9.9p1, OpenSSL 1.1.1w 11 Sep 2023

第六步

这是更改一些ssh的配置比如允许root登录,注意每个环境的配置都不一样,自行决定

echo 'UsePAM yes' >> /etc/ssh/sshd_config  #启用 PAM(Pluggable Authentication Modules,可插拔认证模块) 进行 SSH 身份验证和会话管理。
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config  #允许 root 用户通过 SSH 直接登录
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config #允许 SSH 使用 密码 进行身份验证
echo 'UseDNS no' >> /etc/ssh/sshd_config  #禁用 SSH 服务器的 DNS 反向解析,提高 SSH 连接速度。
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config #开启 X11 转发,允许远程服务器的 GUI 应用程序在本地显示。
chkconfig  --add  sshd   #将 sshd 服务添加到 chkconfig 管理列表。
chkconfig  sshd  on   #设置 sshd 服务在系统启动时自动运行。
chkconfig  --list  sshd   #查看 sshd 服务的启动状态(哪些运行级别下是开启的)。
sshd -t  #检查 /etc/ssh/sshd_config 配置文件的语法是否正确。修改 SSH 配置文件后,建议运行此命令,确保没有语法错误,否则 SSH 可能无法启动。

最后一个命令sshd -t没有任何信息代表配置正确

第七步

可选命令
改为自己使用的ssh端口比如我是设置的13022

vim /etc/ssh/sshd_config

改端口为13022
重启生效

systemctl restart sshd

升级成功

ssh -V
OpenSSH_9.9p1, OpenSSL 1.1.1w  11 Sep 2023

++++++++++++++++++++++++++++++++++++++++++++++

第八步

查看telnet状态

service xinetd status
systemctl status telnet.socket

最后一定要关闭telnet,这个漏洞很多
关闭telnet

service xinetd stop
systemctl stop telnet.socket

++++++++++++++++++++++++++++++++++++++++++++++

欢迎关注我们的微信公众号!
微信公众号

2

评论区