这边通过漏扫检查出了许多关于ssh服务器的漏洞,打补丁过于复杂,通过升级ssh版本解决


  1. 先测试环境执行升级 ,在生产执行前可以在自己的云服务器或是本地虚拟机上先执行一遍升级,centos7.6和红帽7.6差不多,测试环境建议用centos直接测试就行。
  2. telnet备用远程连接安装问题,我没有用到telnet 远程连接, 前期安装也是按照网上升级案例给测试服务器安装telnet远程连接服务,实际的生产环境不允许用运程telnet连接,只有ssh连接工具。(注:查询服务器远程连接ssh的地址命令 service sshd status,看一下自己的运程连接ip是自己的主机还是堡垒机地址。
  3. 升级卸载旧版本ssh问题 ,不需要卸载旧版本的安装,网上一些教程需要卸载目前系统旧版本ssh后在安装,这种方式只能用切换telne运程连接操控升级了。我保留了旧版本ssh安装,通过替换配置文件完成ssh版本替代,重启ssh连接服务更用新版本。
  4. 升级关闭防火墙, 不需要关闭防火墙和关闭SELinux;

升级过程

下载升级包:

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gzwget https://www.openssl.org/source/openssl-1.1.1j.tar.gzwget http://www.zlib.net/zlib-1.2.11.tar.gz

openssl和zlib为相关依赖

没有出网的话可以先先官网下号再通过xftp上传文件到服务器上

漏洞修复-openssh升级_配置文件

这里我用的是VM的虚拟机测试的,所以可以直接拖到虚拟机里去

1.编译安装

查询一下当前环境下是否缺少gcc编译环境,查询命令

rpm -qa gcc

漏洞修复-openssh升级_SSH_02

我这里是没有的,所以要使用命令

yum install -y gcc gcc-c++ (yum安装gcc编译环境)

执行完命令后,再查看已经安装好了

漏洞修复-openssh升级_配置文件_03

这里我们把下好的压缩包都放到/usr/local目录里去,并且都将它解压缩

tar -zxvf openssl-1.1.1q.tar.gz -C /usr/local

tar -zxvf openssh-9.6p1.tar.gz -C /usr/local

tar -zxvf zlib-1.3.1.tar.gz -C /usr/local/

漏洞修复-openssh升级_SSH_04

2.按顺序安装

升级过程是有依赖顺序的,顺序是zlib库->openssl->openssh

2.1安装zlib

cd zlib-1.2.11

./configure --prefix=/usr/local/zlib

make && make install

2.2安装openssl

正常编译源码,指定安装位置到/usr/local/ssl,这个安装位置一定要记住,后面修改配置文件要用。

cd openssl-1.1.1p/

./config --prefix=/usr/local/ssl -d shared

make && make install

这里make编译的时间比较长


接下来再执行ssl配置命令

echo '/usr/local/ssl/lib' >> /etc/ld.so.conf

ldconfig -v

/usr/local/ssl/bin/openssl version -a # 查询这个目录下openssl版本已是1.1.1q

漏洞修复-openssh升级_SSH_05

这里执行Idconfig -v是刷新lib库,

2.3安装Openssh

安装的时候需要指定前面新安装的zlib和ssl安装位置

cd openssh-9.6p1/

./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl

make && make install


版本迁移新版本已经安装完毕,接下来需要对配置文件做好备份和修改

3.配置与备份

需要修改sshd_config文件,同时将旧版本的openssh的旧文件备份,用新安装版本文件重新替代旧版本

3.1修改新安装Openssh允许远程访问

echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config # 运行root用户远程登录

echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config # 密钥对的身份验证方式,允许密钥认证

echo 'PasswordAuthentication yes'>>/usr/local/openssh/etc/sshd_config # 允许远程登陆用密码来认证


如果要修改ssh的配置文件必须得修改/usr/local/openssh/etc/sshd_config,修改/etc/ssh/sshd_config不会生效。

3.2配置文件备份和修改

备份旧版Openssh文件,重新修改为新版Openssh配置文件,实现openssh新版替换

mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config


mv /usr/sbin/sshd /usr/sbin/sshd.bak

cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd


mv /usr/bin/ssh /usr/bin/ssh.bak

cp /usr/local/openssh/bin/ssh /usr/bin/ssh

漏洞修复-openssh升级_SSH_06

3.3重新配置信任关系

升级openssh后,原有公钥消失,信任关系需要重新配置

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

cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen


mv /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak

cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub


到这里文件配置已经替换完成,可以执行ssh -V 查询替换完的版本。

漏洞修复-openssh升级_远程连接_07

3.4修改systemd参数

修改systemd参数(去掉Type或改为Type=simple)

使用命令

vim /usr/lib/systemd/system/sshd.service

漏洞修复-openssh升级_远程连接_08

4.重启服务

重新启动服务,让系统新版openssh替换掉旧版提供的服务

systemctl daemon-reload

systemctl restart sshd

systemctl status sshd


漏洞修复-openssh升级_旧版_09

重新启动sshd服务后,重新建立ssh连接验证ssh升级

最后看一下版本信息

漏洞修复-openssh升级_SSH_10


这里是本文的参考链接