OpenSSH是SSH(Secure SHell)協議的免費開源實現。SSH協議簇可以用來進行遠程控制,或在計算機之間傳送文件。而實現此功能的傳統方式,如telnet、rcp、ftp、rlogin等都是極為不安全的,並且會使用明文傳送密碼。OpenSSH提供了服務端後臺程序和客戶端工具,用來加密遠程控制和文件傳輸過程中的數據,並由此來代替原來的類似服務。
![](https://news.xinpengboligang.com/upload/keji/57ad6ba24b7bf065b9855d228f1b17a7.jpeg)
但是OpenSSH也經常會被爆出一些安全漏洞,我們需要升級OpenSSH版本以修復這些漏洞。
![](https://news.xinpengboligang.com/upload/keji/342dc23c620828da0a969dadde0156c8.jpeg)
現需要將OpenSSH升級到最新9.6p1版本,Openssl升級到1.1.1版本修復這些漏洞。相關環境:
OpenSSH下載地址:
https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
Openssl下載地址:
https://www.openssl.org/source/
Zlib下載地址:https://www.zlib.net/
為防止遠程中斷升級前可以多開幾個ssh終端或者采用telnet方式遠程到主機(升級完記得關閉telnet服務),如果可以直接進入終端建議在終端下進行操作。
1.上傳並解壓升級包。
tar -xvf zlib.tar.gz
tar -xvf openssl-1.1.1w.tar.gz
tar -xvf openssh-9.6p1.tar.gz
2.編譯安裝zlib。
cd zlib-1.3.1
./configure --prefix=/usr/local/zlib
make && make install
echo '/usr/local/zlib/lib' >> /etc/ld.so.conf
ldconfig -v
驗證zlib安裝是否成功,要包含include、lib、share三個目錄。
3.編譯安裝openssl。
cd openssl-1.1.1w
./config --prefix=/usr/local/ssl -d shared
make && make install
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
![](https://news.xinpengboligang.com/upload/keji/2a41e7b2ed84561ff229c0e97d65ab89.jpeg)
4.升級openssh。
停ssh服務,備份ssh配置文件:
systemctl stop sshd
cp -r /etc/ssh /etc/ssh.bak
cp -r /etc/pam.d /etc/pam.d.bak
查看原openssh版本:
cat /etc/redhat-release
rpm -qa|grep openssh
![](https://news.xinpengboligang.com/upload/keji/739b00517596472d582d205932081c3a.jpeg)
根據上面查詢結果,卸載系統裡原有Openssh,一般有三個包全部卸載:
rpm -e --nodeps openssh-clients-7.4p1-21.el7.x86_64
rpm -e --nodeps openssh-7.4p1-21.el7.x86_64
rpm -e --nodeps openssh-server-7.4p1-21.el7.x86_64
rpm -qa | grep openssh
編譯安裝openssh:
cd openssh-9.6p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
![](https://news.xinpengboligang.com/upload/keji/a858de67f7b6f7b2d6a23027662c6969.jpeg)
5.sshd_config文件修改。
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
6.將新的配置復制到指定目錄。
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/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
7.設置ssh服務開機自啟動。
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
重啟sshd服務:
systemctl restart sshd
查看sshd服務狀態:
systemctl status sshd -l
驗證ssh版本:
ssh -V
8.重啟服務器,測試ssh能否登錄服務器成功。
reboot
![](https://news.xinpengboligang.com/upload/keji/85f82ec63a896052405111e76b6875f3.jpeg)