linux离线升级ssh,升级到openssh8.8版本
liunx版本RedHat 7.6 和 Centos7.6
服务器检查漏洞,需要升级服务器ssh版本,从openssh7.4升级到openssh8.8,平滑升级ssh方法。
升级问题
-
实际生产服务器是RedHat 7.6,我在vm虚拟机中搭建了centos7.6测试环境,前期也用了一个RedHat 7.6不理想,实际直接下载的红帽是用不了的,需要注册服务器,要用也能用安装网上需要改一些东西很麻烦,我弃用了。
-
升级过程,直接在服务器升级ssh是有风险的,我参考一些网上平滑升级方法在测和环境弄了几次才成功,过程很坎坷,记录一下这个升级过程。这个升级过程没有用telnet做升级失败备用处理、也没有卸载旧版本ssh,直接开启多个ssh远程连接,一次升级成功,重启ssh服务验证远程连接升级。
- 先测试环境执行升级 ,在生产执行前可以在自己的云服务器或是本地虚拟机上先执行一遍升级,centos7.6和红帽7.6差不多,测试环境建议用centos直接测试就行。
- telnet备用远程连接安装问题,我没有用到telnet 远程连接, 前期安装也是按照网上升级案例给测试服务器安装telnet远程连接服务,实际的生产环境不允许用运程telnet连接,只有ssh连接工具。(注:查询服务器远程连接ssh的地址命令 service sshd status,看一下自己的运程连接ip是自己的主机还是堡垒机地址。
) - 升级卸载旧版本ssh问题 ,不需要卸载旧版本的安装,网上一些教程需要卸载目前系统旧版本ssh后在安装,这种方式只能用切换telne运程连接操控升级了。我保留了旧版本ssh安装,通过替换配置文件完成ssh版本替代,重启ssh连接服务更用新版本。
- 升级关闭防火墙, 不需要关闭防火墙和关闭SELinux;
升级过程
1、备升级依赖
openssh8.8版本升级前所需安装两个依赖 zlib-1.2.11.tar.gz,openssl-1.1.1j.tar.gz,同时检查目前系统ssh版
升级版本依赖。
检查系统ssh版本,centos7.6和RedHat系统安装自带ssh版本就是7.4的版本。
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2、编译安装检查是否有gcc安装环境
测试环境是新安装的,生产环境查了几个都有gcc,安装前查询下是否缺少gcc编译环境,查询命令 rpm -qa gcc
[root@localhost ~]# rpm -qa gcc
gcc-4.8.5-36.el7.x86_64
3、上传文件解压到指定目录
指定到解压目录,我新安装的包都统一解压到/usr/local/src/目录下。
tar -zxvf openssl-1.1.1p.tar.gz -C /usr/local/src/
tar -zxvf openssh-8.8p1.tar.gz -C /usr/local/src/
tar -zxvf zlib-1.2.11.tar.gz -C /usr/local/src/
[root@localhost data]# cd /usr/local/src/
[root@localhost src]# ll
total 40
drwxr-xr-x. 7 ly ly 16384 May 12 10:47 openssh-8.8p1
drwxrwxr-x. 19 root root 4096 May 12 10:10 openssl-1.1.1p
drwxr-xr-x. 14 501 games 4096 May 12 10:05 zlib-1.2.11
[root@localhost src]# pwd
/usr/local/src
3、直接安装新版的zlib、ssl、openssl
升级安装过程有依赖顺序的,顺序是zlib库-> openssl -> openssh
3.1 源码安装安装zlib
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install
3.2 编译安装openssl
正常编译源码,指定安装位置到/usr/local/ssl,这个安装位置一定要记住,后面修改配置文件要用。
cd openssl-1.1.1p/
./config --prefix=/usr/local/ssl -d shared
make && make install
注:安装openssl的时候如果出现提示不用管,只要是 OpenSSL has been successfully 就行。往下执行ssl配置命令:
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
/usr/local/ssl/bin/openssl version -a # 查询这个目录下openssl版本已是1.1.1p
注:升级过程中需要刷新lib库:ldconfig -v
3.3 编译安装openssh
执行执行命令,安装的时候指定前面新安装的zlib和ssl安装位置
cd openssh-8.8p1/
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
注:版本迁移新版本已经安装完成,接下来需要做配置文件备份和修改
4、备份原有文件,并将新的配置复制到指定目录
需要修改 sshd_config文件,同时将openssh7.4旧版本的文件备份,用新安装版本文件重新替代旧版本。
4.1 修改新安装opensh允许远程访问
修改sshd_config文件执行命令
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 # 允许远程登陆用密码来认证
4.2 配置文件备份和修改
备份openssh7.4旧版本文件,重新修改为新版ssh配置文件,实现ssh新版替换。
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
4.2 重新配置信任关系
升级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 查询替换完的版本,查询已经是替换为ssh8.8版本
5、修改systemd参数
修改systemd参数(去掉Type或改为Type=simple)
vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
#Type=notify
Type=simple
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
6、重启sshd服务
重新sshd服务,让系统新版ssh8.8替换掉ssh7.4版本提供的服务
systemctl daemon-reload
systemctl restart sshd
systemctl status sshd
注:在最后重新sshd服务成功后,重新建立ssh远程连接验证ssh升级
[root@localhost src]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1p 21 Jun 2022
参考资料
升级过程参照了这位博主的方法:[https://www.cnblogs.com/liuweinotes/p/15903521.html ] ,感谢这位博主提供的升级经验。