这边通过漏扫检查出了许多关于ssh服务器的漏洞,打补丁过于复杂,通过升级ssh版本解决
- 先测试环境执行升级 ,在生产执行前可以在自己的云服务器或是本地虚拟机上先执行一遍升级,centos7.6和红帽7.6差不多,测试环境建议用centos直接测试就行。
- telnet备用远程连接安装问题,我没有用到telnet 远程连接, 前期安装也是按照网上升级案例给测试服务器安装telnet远程连接服务,实际的生产环境不允许用运程telnet连接,只有ssh连接工具。(注:查询服务器远程连接ssh的地址命令 service sshd status,看一下自己的运程连接ip是自己的主机还是堡垒机地址。
- 升级卸载旧版本ssh问题 ,不需要卸载旧版本的安装,网上一些教程需要卸载目前系统旧版本ssh后在安装,这种方式只能用切换telne运程连接操控升级了。我保留了旧版本ssh安装,通过替换配置文件完成ssh版本替代,重启ssh连接服务更用新版本。
- 升级关闭防火墙, 不需要关闭防火墙和关闭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上传文件到服务器上
这里我用的是VM的虚拟机测试的,所以可以直接拖到虚拟机里去
1.编译安装
查询一下当前环境下是否缺少gcc编译环境,查询命令
rpm -qa gcc
我这里是没有的,所以要使用命令
yum install -y gcc gcc-c++ (yum安装gcc编译环境)
执行完命令后,再查看已经安装好了
这里我们把下好的压缩包都放到/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/
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
这里执行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
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 查询替换完的版本。
3.4修改systemd参数
修改systemd参数(去掉Type或改为Type=simple)
使用命令
vim /usr/lib/systemd/system/sshd.service
4.重启服务
重新启动服务,让系统新版openssh替换掉旧版提供的服务
systemctl daemon-reload
systemctl restart sshd
systemctl status sshd
重新启动sshd服务后,重新建立ssh连接验证ssh升级
最后看一下版本信息
这里是本文的参考链接