一、更新前的准备
1)、查看当前版本:
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2)、安装操作系统依赖包:
yum install -y gcc zlib-devel
3)、安装telnet服务,为防止失连服务器
yum install telnet* -y
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl status telnet.socket
4)、其他服务器telnet保持连接被升级服务器
telnet xxx.xxx.xx.x
PS:默认情况下,root用户是被禁止了telnet登录的,需要进行以下操作方可登录。 #开启root的telnet登录。
mv /etc/securetty /etc/securetty.bak
二、下载最新版openssh和openssl:
1)、openssh下载网址:https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
例如:OpenSSH9.5p1
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz
2)、由于openssh依赖openssl,所以需要安装新版openssl,从OpenSSH9.4p1开始要求openssl>=1.1.1版本
openssl下载网址:https://www.openssl.org/source/
例如:openssl-1.1.1w版本
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
3)、上传下载的安装包:
openssl-1.1.1w.tar.gz和openssh-9.5p1.tar.gz
三、编译升级openssl-1.1.1w 1)、进入到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
2)、修改配置文件:
编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:
cat >> /etc/profile <<EOF
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
EOF
3)、保存配置退出后,然后执行如下命令,确认openssl版本为1.1.1w:
source /etc/profile
openssl version
四、编译升级openssh-9.5p1 1)、进入到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
2)、修改配置文件:
vi /usr/openssh/openssh9.5p1/etc/sshd_config
#允许root登录,默认值prohibit-password表示root用户只能通过公私钥的方式登录,不能以密码的方式登录
PermitRootLogin yes
3)、创建sshd服务自启动文件:
cat > /usr/lib/systemd/system/sshd9.service << EOF
[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
EOF
4)、停用原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/
5)、启动新的sshd服务:
systemctl daemon-reload
systemctl start sshd9.service
systemctl status sshd9.service
systemctl enable sshd9.service
五、测试验证 重新连接一个新的窗口来测试新sshd是否可以正常连接,并测试版本号,最后重启服务器测试是否可以重启成功:
sshd -V
OpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023
ssh -V
OpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023
注:确认版本号是否更新成功,这时不要着急关闭当前窗口,再使用xshell等工具连接服务器,如果能连接上,说明本次升级是成功!
六、最后关闭telnet服务与关闭root的telnet登录
systemctl stop telnet.socket && systemctl disable telnet.socket
#关闭root的telnet登录。
mv /etc/securetty.bak /etc/securetty