自学内容网 自学内容网

升级OpenSSH到最新版本

        修复OpenSSH 代码问题漏洞。

        ssh命令是openssh软件的一部分,ssh对ssl是具有依赖关系的。我们无法升级操作系统的openssl,但是我们可以另外编译一个openssl,放到单独的应用目录中,与操作系统的openssl互不干涉。再基于新编译出来的openssl,将新的openssh软件编译出来。 而操作系统的openssh是可以被替换的。如果你尝试执行 yum remove openssh* 命令就可以看到,没有其它软件依赖于openssh。此外,openssh软件提供了sshd服务。所以,我们只要还要配置并搭建好sshd服务,就可以替代操作系统自带的openssh了。

注意:由于ssh是远程连接服务器的功能,在进行操作升级openssh前,请打开多个连接会话使用 top 保持链接,如升级失败,可通过已连接的会话进行回滚操作。 

通过命令查看目前系统的ssh和sshd版本:

ssh -V
sshd -V

一、安装操作系统依赖包

yum install -y telnet gcc zlib-devel

二、下载软件包 

 openssl下载地址:1.1.1 | Library

openssh下载地址:Index of /pub/OpenBSD/OpenSSH/portable/

ssh对ssl是具有依赖关系的,openssh安装包解压后,在INSTALL文件有ssh和ssl版本对应关系

  •  下载openssl

  • 下载openssh

三、编译升级 

编译升级openssl-1.1.1w

1、进入到openssl-1.1.1w.tar.gz文件所在的目录,解压压缩包

tar -xzvf openssl-1.1.1w.tar.gz

2、进入解压后的目录

cd openssl-1.1.1w

3、创建安装目录

mkdir -p /usr/openssh/openssl1.1.1w

4、编译安装

./config --prefix=/usr/openssh/openssl1.1.1w
make && make install

5、设置环境变量

vim /etc/profile

#在profile文件最后添加如下两行
export LD_LIBRARY_PATH=/usr/openssh/openssl1.1.1w/lib:$LD_LIBRARY_PATH
export PATH=/usr/openssh/openssh9.9p1/bin:/usr/openssh/openssh9.9p1/sbin:/usr/openssh/openssl1.1.1w/bin:$PATH

#退出
:wq

#重新加载 /etc/profile 文件
source /etc/profile

6、查看openssl版本

openssl version

编译升级openssh-9.9p1 

1、进入到openssh-9.9p1.tar.gz文件所在的目录,解压压缩包

tar -xzvf openssh-9.9p1.tar.gz

2、进入解压后的目录

cd openssh-9.9p1

3、创建安装目录

mkdir -p /usr/openssh/openssh9.9p1

4、编译安装

./configure --prefix=/usr/openssh/openssh9.9p1 --with-ssl-dir=/usr/openssh/openssl1.1.1w

make && make install

5、之前环境变量已一起配置,跳过

6、修改配置文件

vim /usr/openssh/openssh9.9p1/etc/sshd_config

#允许root登录,默认值prohibit-password表示root用户只能通过公私钥的方式登录,不能以密码的方式登录
PermitRootLogin yes

7、创建sshd服务自启动文件

vi /usr/lib/systemd/system/sshd9.service

#文件内容
[Unit]
Description=OpenSSH server daemon
After=network.target
[Service]
Type=simple
Environment=LD_LIBRARY_PATH=/usr/openssh/openssl1.1.1w/lib
ExecStart=/usr/openssh/openssh9.5p1/sbin/sshd -D -f /usr/openssh/openssh9.5p1/etc/sshd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

8、接下来,关键的一步来了,我们要关闭旧的sshd服务,启动新的sshd服务。这个操作如果失败了,不会导致现有的ssh远程连接断开。所以我们可以先关闭旧的sshd程序,再启动新的sshd程序

systemctl stop sshd.service
systemctl disable sshd.service

9、备份相关文件,避免冲突

mkdir /home/ssh-old-bak
mv /etc/ssh /home/ssh-old-bak/
mv /usr/sbin/sshd /home/ssh-old-bak/

10、启动新的sshd服务

systemctl daemon-reload
systemctl start sshd9.service
systemctl status sshd9.service
systemctl enable sshd9.service

        最后重新连接一个新的窗口来测试是否可以正常连接,并测试版本号,最后重启服务器测试是否可以重启成功


原文地址:https://blog.csdn.net/zclwjy/article/details/142955062

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!