参考自:https://blog.csdn.net/morecccc/article/details/134758892

原文亲测有效,本文用于备份和记录心得

注意事项:

①先安装telnet,防止ssh升级失败,连不上服务器的情况(但是需要拥有root密码,才能使用su root,不然这一步可以省略)

②下载想要的版本的包

cd /usr/local/src/
wget https://www.openssl.org/source/openssl-3.2.1.tar.gz
wget https://zlib.net/current/zlib.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz

③解压安装zlib

cd /usr/local/src/
tar zxvf zlib.tar.gz
cd zlib-1.3.1
yum install gcc gcc-c++ make -y
./configure --prefix=/usr/local/zlib
make && make install

④升级ssl
cd /usr/local/src/
tar zxvf openssl-3.2.1.tar.gz
cd openssl-3.2.1
yum install -y perl-CPAN perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
./config --prefix=/usr/local/ssl --shared
make && make install

④①备份ssl,以防未知情况导致升级失败,可以回到升级前的版本(这里特别注意该备份语句只能执行一次,不然会覆盖备份文件导致本次备份失败)

mv -f /usr/bin/openssl /usr/bin/openssl.bak

④②路径写入etc/ld.so.conf(这里也有坑,需要根据服务器环境来配置,第一次按照原文用/usr/local/ssl/lib并不能成功)

[root@localhost ~]# whereis openssl
openssl: /usr/bin/openssl /usr/bin/openssl.bak /usr/lib64/openssl /usr/include/openssl

我的服务只有64位的路径,所以用了下面的路径

echo '/usr/local/ssl/lib64' >> /etc/ld.so.conf
④③建立软连接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl

④④检查配置问题(个人猜测)
ldconfig -v

④⑤查看ssl版本是否为新的版本
openssl version -a

⑤升级sshd

⑤①备份ssh相关文件

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
cp -p /usr/sbin/sshd /usr/sbin/sshd.bak
cp -p /usr/bin/ssh /usr/bin/ssh.bak
cp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
cp -p /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak

⑤②停止sshd服务,并备份ssh文件夹

systemctl stop sshd
cp -r /etc/ssh /etc/ssh.old

⑤③卸载ssh,注意全部卸载干净
rpm -qa | grep openssh
yum remove openssh-7.4p1-23.el7_9.x86_64
rpm -qa | grep openssh

⑤④升级ssh
cd /usr/local/src/
tar zxvf openssh-9.7p1.tar.gz
cd openssh-9.7p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install

⑤⑤添加相关配置
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config

⑤⑥将编译安装的新配置复制到原目录中

cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

⑤⑦复制启动脚本,并添加启动权限
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

⑤⑧重启ssh,并查看状态

systemctl restart sshd
systemctl status sshd

⑤⑨重新加载ssh配置

systemctl daemon-reload

⑤⑩查看ssh版本是否为新版本
ssh -V

 

如果是很多台服务器可以自己搞成sh文件去批量执行,本文只是记录单个的方法和原理,不建议在不了解原理前就直接使用网上的一键执行语句