漏洞名称
解决方法
将
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
++++++++++++++++++++++++++++++++++++++++++++++
欢迎关注我们的微信公众号!
评论区