1.升級環境
OS版本:Centos 7.8
openssh和openssl 版本:
[root@localhost media]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
升級目標:
openssl 1.0.2k --> openssl 1.1.1k
openssh 7.4p1 --> openssh 8.6p1
以下所有操作均在root用戶下完成。
2.安裝telnet
防止openssh升級出現問題,連不上服務器,建議開啟telnet服務。
# 查看是否安裝telnet服務
rpm -qa | grep telnet
rpm -qa | grep xinetd
# 若沒有安裝,使用yum安裝
yum -y install telnet*
yum -y install xinetd
#使服務開機自啟
systemctl enable xinetd.service
systemctl enable telnet.socket
#開啟服務
systemctl start telnet.socket
systemctl start xinetd
vi /etc/securetty
在最后添加兩行
pts/0
pts/1
systemctl restart xinetd
# 確認下是否啟動成功
netstat -plnt |grep 23
3.升級OpenSSl
3.1 查看原版本
[root@localhost media]# openssl version -a
3.2 解壓安裝
安裝系統包
[root@localhost media]# yum -y install net-tools perl gcc gcc++ make
解壓安裝
[root@localhost media]# tar zxvf openssl-1.1.1k-20210525.tar.gz
[root@localhost media]# cd openssl-1.1.1k/
[root@localhost openssl-1.1.1k]# ./config --prefix=/usr/local/openssl #檢查環境
[root@localhost openssl-1.1.1k]# ./config -t
[root@localhost openssl-1.1.1k]# make && make install #編譯安裝
3.3 檢查更新函數庫
cd /usr/local
ldd /usr/local/openssl/bin/openssl
1 [root@localhost openssl-1.1.1k]# cd /usr/local/ 2 [root@localhost local]# ldd /usr/local/openssl/bin/openssl 3 linux-vdso.so.1 => (0x00007ffe03d81000) 4 libssl.so.1.1 => not found 5 libcrypto.so.1.1 => not found 6 libdl.so.2 => /lib64/libdl.so.2 (0x00007faf28080000) 7 libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faf27e64000) 8 libc.so.6 => /lib64/libc.so.6 (0x00007faf27a96000) 9 /lib64/ld-linux-x86-64.so.2 (0x00007faf28284000)
[root@localhost local]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf #添加所缺函數庫
[root@localhost local]# ldconfig -v #更新函數庫
[root@localhost local]# openssl/bin/openssl version #查看新安裝的版本
3.4 增加openssl軟連接
[root@localhost local]# which openssl #查看舊版本openssl命令在哪里
[root@localhost local]# mv /bin/openssl /usr/bin/openssl.old #將舊版本openssl移除
[root@localhost local]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl #新版本制作軟鏈接
[root@localhost local]# openssl version 最后查看版本,更新完畢
1 [root@localhost local]# openssl version 2 OpenSSL 1.0.2k-fips 26 Jan 2017
3.5 刪除舊版openssl
#檢查系統中舊版openssl軟件
1 [root@localhost local]# rpm -qa |grep openssl 2 openssl098e-0.9.8e-29.el7.centos.3.x86_64 3 openssl-libs-1.0.2k-19.el7.x86_64 4 openssl-1.0.2k-19.el7.x86_64 5 xmlsec1-openssl-1.2.20-7.el7_4.x86_64
我們需要卸載 openssl-1.0.2k-19.el7.x86_64
[root@localhost local]# rpm -e --nodeps openssl-1.0.2k-19.el7.x86_64
卸載舊版本后,需要重新為新版做軟連接:
[root@localhost local]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
4.升級openssh
4.1 解壓安裝包
[root@localhost media]# tar zxvf openssh-8.6p1-20210419.tar.gz
4.2 移除舊版本
[root@localhost media]# mv /etc/ssh /etc/ssh.old
注意:移除之后,不能退出當前會話;若退出,只能通過telnet登錄了。
4.3 安裝系統包
[root@localhost media]# yum -y install zlib-devel pam-devel openssl-devel
4.4 編譯安裝
[root@localhost media]# cd openssh-8.6p1/
[root@localhost openssh-8.6p1]#./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
config過程中遇到的錯誤:
報錯1:configure: error: *** zlib.h missing
需安裝:
yum -y install zlib-devel
報錯2:configure: error: PAM headers not found
需安裝:
yum -y install pam-devel
報錯3:find openssl head...ERROR
原因是舊版本的openssl在系統里,需要卸載掉,需要卸載openssl。
處理過程:
參考步驟3.5.
開始編譯安裝:
[root@localhost openssh-8.6p1]# make && make install
4.5 修改啟動腳本
# 拷貝啟動腳本
[root@localhost openssh-8.6p1]# cp ./contrib/redhat/sshd.init /etc/init.d/sshd
# 修改啟動腳本
[root@localhost openssh-8.6p1]# vi /etc/init.d/sshd
# 按下圖修改,需要注意,此路徑是你安裝新版本openssh的路徑,根據你的實際情況修改:
SSHD=/usr/local/openssh/sbin/sshd

sed -i 's#/usr/sbin/sshd#/usr/local/openssh/sbin/sshd#' /etc/init.d/sshd
#配置sshd開機啟動
[root@localhost openssh-8.6p1]# chkconfig --add sshd
[root@localhost openssh-8.6p1]# chkconfig --level 2345 sshd on
[root@localhost openssh-8.6p1]# chkconfig --list
4.6 修改sshd配置文件/etc/ssh/sshd_config
[root@localhost openssh-8.6p1]# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config #直接用root登錄終端
[root@localhost openssh-8.6p1]# echo 'X11Forwarding yes' >> /etc/ssh/sshd_config #設置是否允許X11轉發
[root@localhost openssh-8.6p1]# echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config #是否允許密碼驗證
4.7 卸載原有ssh
for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps;done
提示警告:
[root@localhost openssh-8.6p1]# for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps;done
warning: /etc/ssh/moduli saved as /etc/ssh/moduli.rpmsave
warning: /etc/ssh/sshd_config saved as /etc/ssh/sshd_config.rpmsave
warning: /etc/ssh/ssh_config saved as /etc/ssh/ssh_config.rpmsave
注意:如果卸載舊版本過程中,配置文件沒有自動備份,需要從前面的/etc/ssh.old中把對應的文件cp到原來的位置。同時注意當前ssh端口是否為默認端口。
將警告中被修改的文件名字再改回來
[root@localhost openssh-8.6p1]# mv /etc/ssh/sshd_config.rpmsave /etc/ssh/sshd_config
[root@localhost openssh-8.6p1]# mv /etc/ssh/ssh_config.rpmsave /etc/ssh/ssh_config
[root@localhost openssh-8.6p1]# mv /etc/ssh/moduli.rpmsave /etc/ssh/moduli
4.8 替換相關命令,並重啟sshd服務
[root@localhost openssh-8.6p1]# cp -arp /usr/local/openssh/bin/* /usr/bin/ #替換相關命令
[root@localhost openssh-8.6p1]# service sshd restart #重啟sshd服務
驗證升級后版本
1 [root@localhost openssh-8.6p1]# ssh -V 2 OpenSSH_8.6p1, OpenSSL 1.1.1k 25 Mar 2021
4.9 關閉telnet
#關閉telnet服務
systemctl stop telnet.socket
systemctl stop xinetd
#關閉telnet服務開機自啟
systemctl disable xinetd.service
systemctl disable telnet.socket
