升级openssh以及openssl

获取安装包

通过网盘分享的文件:openssh-openssl-curl_update

链接: https://pan.baidu.com/s/12voImgavVSHZyJIwiqtaNA?pwd=h6uh 提取码: h6uh

--来自百度网盘超级会员v4的分享

安装telnet服务

升级openssh和openssl风险较大,telnet服务可以基于TELNET协议远程登录,在升级openssh之前我们需要安装telnet服务以避免ssh服务起不来导致连接不上机器

复制代码
yum install telnet-server -y
yum install xinetd -y
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start xinetd.service
systemctl start telnet.socket
systemctl status xinetd.service
systemctl status telnet.socket

telnet默认只能普通用户登录,root用户登录需要进行指定哪些终端设备允许 root 用户登录:

复制代码
tail -n 4 /etc/securetty 
pts/0
pts/1
pts/2
pts/3

# pts 是 "pseudo-terminal slave"(伪终端从设备)的缩写,通常用于表示通过 SSH、Telnet 或其他远程连接工具创建的虚拟终端
# 数字 0 到 4 表示具体的终端编号,意味着系统允许 root 用户通过前 4 个伪终端直接登录。

测试登录:

复制代码
telnet 8.159.128.153 
Trying 8.159.128.153...
Connected to 8.159.128.153.
Escape character is '^]'.
Password: 
Login incorrect

iZuf6c6umecwk5it5hv5b9Z login: root
Password: 
Last login: Fri Aug 15 09:19:01 from ::ffff:116.62.210.211

Welcome to Alibaba Cloud Elastic Compute Service !

[root@iZuf6c6umecwk5it5hv5b9Z ~]# 

登录成功。

备份旧版本openssh和openssl

复制代码
# 查找需要备份的目录和文件
whereis ssh sshd openssl 
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz
openssl: /usr/bin/openssl /usr/lib64/openssl /usr/share/man/man1/openssl.1ssl.gz

# 进行备份
cp /usr/bin/ssh /usr/bin/ssh-bak 
cp -r /etc/ssh /etc/ssh-bak 
cp /usr/sbin/sshd /usr/sbin/sshd-bak 
cp /usr/bin/openssl /usr/bin/openssl-bak 
cp -r /usr/lib64/openssl /usr/lib64/openssl-bak 

编译安装 zlib

复制代码
cd /root/openssh-openssl-curl_update/
tar -xf zlib-1.3.1.tar.gz
cd zlib-1.3.1/
./configure --prefix=/usr/local/zlib-1.3.1
make -j 4 && make install

编译安装 openssl

复制代码
cd /root/openssh-openssl-curl_update/
tar -xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w/ 
./config --prefix=/usr/local/openssl-1.1.1w
make -j 4 && make install 

ln -sf /usr/local/openssl-1.1.1w/lib/libcrypto.so.1.1 /usr/lib64/
ln -sf /usr/local/openssl-1.1.1w/bin/openssl /usr/bin/openssl 
ln -sf /usr/local/openssl-1.1.1w/lib/libssl.so.1.1 /usr/lib64/

编译安装openssh

安装

复制代码
cd /root/openssh-openssl-curl_update/
tar -xf openssh-9.9p2.tar.gz
cd openssh-9.9p2/ 
./configure --prefix=/usr/local/openssh-9.9p2 --sysconfdir=/etc/ssh --with-zlib=/usr/local/zlib-1.3.1  --with-ssl-dir=/usr/local/openssl-1.1.1w --with-pam --without-openssl-header-check
make -j 4 && make install

如果以上报错,解决办法:

复制代码
yum -y install pam-devel

之后重新编译。

替换旧版本执行命令文件

编译之后需要替换旧版本相关的执行文件,每个旧版本执行文件需要用which命令查看在哪个目录下。

复制代码
which sshd
/sbin/sshd
cp /sbin/sshd /sbin/sshd-bak
ln -sf /usr/local/openssh-9.9p2/sbin/sshd /sbin/sshd

which ssh
/bin/ssh
cp /bin/ssh /bin/ssh-bak
ln -sf /usr/local/openssh-9.9p2/bin/ssh /bin/ssh

which scp
/bin/scp
cp /bin/scp /bin/scp-bak
ln -sf /usr/local/openssh-9.9p2/bin/scp /bin/scp

which sftp
/bin/sftp
cp /bin/sftp /bin/sftp-bak
ln -sf /usr/local/openssh-9.9p2/bin/sftp /bin/sftp 

which ssh-add 
/bin/ssh-add
cp /bin/ssh-add /bin/ssh-add-bak
ln -sf /usr/local/openssh-9.9p2/bin/ssh-add /bin/ssh-add-bak

which ssh-keygen
/bin/ssh-keygen
cp /bin/ssh-keygen /bin/ssh-keygen-bak
ln -sf /usr/local/openssh-9.9p2/bin/ssh-keygen /bin/ssh-keygen

which ssh-keyscan
/bin/ssh-keyscan
cp /bin/ssh-keyscan /bin/ssh-keyscan-bak
ln -sf /usr/local/openssh-9.9p2/bin/ssh-keyscan /bin/ssh-keyscan

配置使用旧配置文件

尽量保持原配置不变,应用旧版本的配置文件

复制代码
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 
cp /etc/ssh-bak/sshd_config /etc/ssh/sshd_config
systemctl restart sshd 
systemctl enable sshd
systemctl status sshd

验证

复制代码
sshd -V
OpenSSH_9.9p2, OpenSSL 1.1.1w  11 Sep 2023

升级成功。

停止telnet服务

升级之后为了安全起见需要关闭telnet服务

复制代码
systemctl stop xinetd.service
systemctl stop telnet.socket
systemctl disable xinetd.service
systemctl disable telnet.socket

注意

如果升级之后,curl命令和yum命令不可用,说明升级跨度版本过大,需要升级curl命令的依赖:

复制代码
cd /root/openssh-openssl-curl_update/
tar xf curl-8.8.0.tar
cd curl-8.8.0/
./configure --prefix=/usr/src --with-ssl=/usr/local/openssl-1.1.1w
make -j 4 && make install
mv /lib64/libcurl.so.4.6.0 /lib64/libcurl.so.4.6.0_bak
chmod +x /root/openssh-openssl-curl_update/curl-8.8.0/lib/.libs/libcurl.so.4.8.0
mv  /root/openssh-openssl-curl_update/curl-8.8.0/lib/.libs/libcurl.so.4.8.0  /lib64/libcurl.so.4.6.0
which curl 
/bin/curl
mv /bin/curl /usr/bin/curl.bak
mv /root/openssh-openssl-curl_update/curl-8.8.0/src/.libs/curl /bin/curl