为保障在升级openssh过程中出现网络中断导致连接不上服务器,建议先安装telnet服务,当网络中断时,可通过telnet远程到服务器。
CVE-2021-28041漏洞描述:
OpenSSH(OpenBSD Secure Shell)是Openbsd计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH before 8.5 存在安全漏洞,攻击者可利用该漏洞在遗留操作系统上不受约束的代理套接字访问
参考链接:
ubuntu20.4升级OpenSSL和OpenSSH_ubuntu升级openssh最新版_lqh_linux的博客-CSDN博客
openssh漏洞修复 - 简书
OpenSSH 安全漏洞(CVE-2021-28041)修复(升级OpenSSH至最新版本(8.6p1))_云间歌的博客-CSDN博客
Ubuntu系统升级openSSH和openSSL到最新版本8.8_ubuntu升级openssh到8.8_虚竹小和尚的博客-CSDN博客
openssl
官方下载地址: https://www.openssl.org/source/
openssl-3.1.0
openssh
官方下载地址:https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
openssh-9.3p1(原8.2p1)
zlib
官方下载地址: http://www.zlib.net/
zlib-1.2.13
验证telnet服务是否存在并启用。telnet ip # 测试是否成功登陆;如果登录不成功,安装telnet服务。
在root下安装依赖
apt install xinetd
apt-get install openbsd-inetd telnetd telnet -y
启动服务
/etc/init.d/openbsd-inetd restart
# 出现Restarting openbsd-inetd (via systemctl): openbsd-inetd.service.
查看telnet服务的默认端口是否启动
netstat -anpt|grep 23
默认情况下,telnet连接不能用root账号登陆,需要用普通用户的账号连接
用 telnet ip 测试是否成功登陆
telnet 124.16.147.51
如果配置正确,系统提示输入远程机器的用户名和密码
注:默认只允许普通用户
root@aa:/home/aa# telnet 124.16.147.51
Trying 124.16.147.51...
Connected to 124.16.147.51.
Escape character is '^]'.
Ubuntu 20.04.5 LTS
aa login: aa
Password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-144-generic x86_64)
---参考下面的--------
[root@jzyue ~]# telnet 172.26.152.68
Trying 172.26.152.68...
Connected to 172.26.152.68.
Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64
jzyue login: root
Password:
Last login: Thu May 30 09:27:56 from 221.130.253.135
Welcome to Alibaba Cloud Elastic Compute Service !
在root下卸载原openssh
apt-get remove openssh-server openssh-client -y
此时想再通过类似xshell,putty之类的工具访问对应服务器就失效了,所以切勿关闭当前操作界面。
在root下安装 libpam0g-dev和gcc
apt-get update -y
apt-get install libpam0g-dev -y
apt install build-essential -y
cd /mnt/
cp -r /home/aa/下载/zlib-1.2.13 zlib-1.2.13
cd zlib-1.2.13/
./configure --shared
make && make install
cd /mnt/
cp -r /home/aa/下载/openssl-3.1.0 openssl-3.1.0
./config shared zlib #一定要加上shared 参数,要不在安装openssh的时候就无法找到
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
因为源码安装默认安装的位置是 /usr/local/ssl 需要将创建软链接到系统位置
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
执行上述命令前,建议先通过 find / -name openssl
查看一下bin和include对应的openssl安装包的位置,不出意外的话,应该和上面的命令是一样的。
find / -name "libssl.so"
#找到如下位置
/mnt/openssl-3.1.0/libssl.so
/usr/local/lib64/libssl.so
mkdir -p /usr/local/openssl/lib64
ln -s /usr/local/lib64/libssl.so /usr/local/openssl/lib64/libssl.so
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf
ldconfig -v
通过 find / -name libcrypto.so.3
和 find / -name libssl.so.3
查找到对应so文件的位置,并建立软连接
ln -s /usr/local/lib64/libssl.so.3 /usr/lib/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3
openssl version
# OpenSSL 3.1.0 14 Mar 2023 (Library: OpenSSL 3.1.0 14 Mar 2023)
openssl version -a
至此openssl 已经成功升级到3.1.0
mv /etc/init.d/ssh /etc/init.d/ssh.old
cp -r /etc/ssh /etc/ssh.old
cd /mnt/
cp -r /home/aa/下载/openssh-9.3p1 openssh-9.3p1
cd openssh-9.3p1/
whereis openssl
#在/usr/local/openssl,下一步需要指定openssl的安装路径
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/sshd
#报错,编译失败,请检查
configure: error: Your OpenSSL headers do not match your
library. Check config.log for details.
If you are sure your installation is consistent, you can disable the check
by running "./configure --without-openssl-header-check".
Also see contrib/findssl.sh for help identifying header/library mismatches.
vim /etc/ld.so.conf
# 文件内容如下
include /etc/ld.so.conf.d/*.conf
openssl3安装略有问题。路径,编译参数那些。重新安装了openssl在 /root/openssl3.1.0。
root下那些个文件不要删,算是依赖。
make && make install
ssh -V
# OpenSSH_9.3p1, OpenSSL 3.1.0 14 Mar 2023
sshd -V
# OpenSSH_9.3, OpenSSL 3.1.0 14 Mar 2023
cd /etc/ssh
mv sshd_config sshd_config.default
cp …/ssh.old/sshd_config ./
mv /etc/init.d/ssh.old /etc/init.d/ssh
systemctl unmask ssh
systemctl restart sshd