升级前具有漏洞的的版本
通过命令查看目前系统的ssh和sshd版本:
ssh -V sshd -V
注意:由于ssh是远程连接服务器的功能,在j进行下面操作升级openssh前,请打开多个连接会话使用 top
保持链接,如升级失败,可通过已连接的会话进行回滚操作。
升级
一、 安装操作系统依赖包:
yum install -y telnet gcc zlib-devel
二、下载软件包
openssl下载地址:/source/old/index.html
openssh下载地址:Index of /pub/OpenBSD/OpenSSH/portable/
三、编译升级
编译升级openssl-1.1.1w
- 进入到openssl-1.1.1w.tar.gz文件所在的目录,执行编译安装命令:
tar -xzvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w mkdir -p /usr/openssh/openssl1.1.1w ./config --prefix=/usr/openssh/openssl1.1.1w make make install ll /usr/openssh/openssl1.1.1w cd .. rm -rf openssl-1.1.1w
- 修改配置文件:
编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:
export LD_LIBRARY_PATH=/usr/openssh/openssl1.1.1w/lib:$LD_LIBRARY_PATH export PATH=/usr/openssh/openssh9.5p1/bin:/usr/openssh/openssh9.5p1/sbin:/usr/openssh/openssl1.1.1w/bin:$PATH
- 保存配置退出后,然后执行如下命令,确认openssl版本为1.1.1w:
source /etc/profile openssl version
编译升级openssh-9.5p1
- 进入到openssh-9.5p1.tar.gz文件所在的目录,执行编译安装命令:
tar -xzvf openssh-9.5p1.tar.gz cd openssh-9.5p1 mkdir -p /usr/openssh/openssh9.5p1 ./configure --prefix=/usr/openssh/openssh9.5p1 --with-ssl-dir=/usr/openssh/openssl1.1.1w make make install
- 修改配置文件:
vi /usr/openssh/openssh9.5p1/etc/sshd_config
- 允许root登录,默认值prohibit-password表示root用户只能通过公私钥的方式登录,不能以密码的方式登录
PermitRootLogin yes
- 创建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
停用原sshd服务,并备份相关文件
systemctl stop sshd.service systemctl disable sshd.service
备份文件:
mkdir /home/ssh-old-bak mv /etc/ssh /home/ssh-old-bak/ mv /usr/sbin/sshd /home/ssh-old-bak/ mv /usr/lib/systemd/system/sshd-keygen.service /home/ssh-old-bak/ mv /usr/lib/systemd/system/sshd.service /home/ssh-old-bak/ mv /usr/lib/systemd/system/sshd@.service /home/ssh-old-bak/ mv /usr/lib/systemd/system/sshd.socket /home/ssh-old-bak/
启动新的sshd服务
systemctl daemon-reload systemctl start sshd9.service systemctl status sshd9.service systemctl enable sshd9.service
测试验证
重新连接一个新的窗口来测试新sshd是否可以正常连接,并测试版本号,最后重启服务器测试是否可以重启成功
sshd -V ssh -V