離線升級openssh及報錯處理


Linux Centos6 OpenSSH版本低導致的安全漏洞 升級OpenSSH和OpenSSl來修復漏洞 由於最近公司項目需要重新部署到服務器,檢查出的安全漏洞,其中 一項就是Openssh版本低過低所以導致的遠程執行漏洞, 於是我就要進升級版本填補漏洞。

因為沒有無外網情況,所以我下載了一個官方鏡像做成yum源,鏡像地址http://isoredirect.centos.org/centos/6/isos/x86_64/,如何掛載配置yum源請自行百度

首先 1、查看OpenSSH版本,在服務器輸入以下命令:

# ssh -V

2、確認系統是否已經確認安裝gcc編譯器:

# gcc -v 

  如果沒安裝參考: https://www.imooc.com/article/17780?block_id=tuijian_wz%20yum%20-y%20install%20gcc%20gcc-c++%20kernel-devel%20//

3.升級Zlib

下載最新版本的Zlib:Zlib 官方網站:http://www.zlib.net/

# wget -c http://www.zlib.net/zlib-1.2.11.tar.gz

# tar -xzvf zlib-1.2.11.tar.gz 

# cd zlib-1.2.11/ # ./configure --prefix=/usr/local/zlib # make install

 現在zlib 編譯安裝在 /usr/local/zilib中了 ,如果出現“Compiler error reporting is too harsh for ./configure (perhaps remove -Werror).** ./configure aborting.”報錯,安裝gcc

4.升級openssl:

openssl下載:http://www.openssl.org/source/

確認是否安裝了SSI和查看版本:

# openssl version -a 或者 openssl version

# cd /usr/local/src

# tar -zvxf openssl-1.1.1h.tar.gz 

# cd openssl-1.1.1h # ./config --prefix=/usr/local/openssl # make && make install

編譯安裝是出現:

報錯:libgmp.so.3: cannot open shared object file: No such file

處理方法:

找到libgmp.so.*文件:

# find -name libgmp.so.*
/usr/lib64/libgmp.so.10.3.2 
/usr/lib64/libgmp.so.10

進入目錄下做軟連接:

#cd  /usr/lib64
# ln -s libgmp.so.10.3.2 libgmp.so.3

備注:/usr/bin/openssl為舊的Openssl文件,進行下一步之前記得備份一下

# mv /usr/bin/openssl /usr/bin/openssl.bak

將安裝好的openssl 的openssl命令軟連到/usr/bin/openssl:

# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

在/etc/ld.so.conf文件中寫入openssl庫文件的搜索路徑:

# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

使修改后的/etc/ld.so.conf生效:

# ldconfig -v

查看版本:

# openssl version

至此,Openssl升級完畢

5、關閉selinux 命令:

# vim /etc/sysconfig/selinux 

修改 SELINUX=disabled,輸入:wq 保存退出

臨時關閉selinux:

# setenforce 0
# getenforce 

 關閉防火牆:

# service iptables stop
# chkconfig iptables off 

 

6、安裝telnet並開起來,防止意外導致ssh無法連接 檢測telnet-server的rpm包是否安裝:

# rpm -qa telnet-server

如沒有輸出就要安裝,安裝命令:

# yum install telnet-server

Centos6只需要把xinetd啟動:

# service xinetd start

加入開機自啟套餐:

# chkconfig --add xinetd

設置好之后顯示如下 : xinetd 0:關閉 1:關閉 2:關閉 3:啟用 4:關閉 5:啟用 6:關閉

# chkconfig --list | grep xinetd

可以再看看23端口開啟:

#netstat -plntu

默認情況下,系統是不允許root用戶telnet遠程登錄的。如果要使用root用戶直接登錄,需設置如下內容:

修改telnet文件disable=no(原有值為yes),允許用戶遠程登錄

# sed -i '12 s/yes/no/g'/etc/xinetd.d/telnet

# echo 'pts/0' >>/etc/securetty

# echo 'pts/1' >>/etc/securetty

# echo 'pts/2' >>/etc/securetty

# echo 'pts/3' >>/etc/securetty

重啟服務:

# service xinetd restart

查看下xinetd端口是否啟用:

# netstat -plntu

接下來在你計算機上打開telnet客戶端: 然后測試打開cmd.exe看看能不能登錄,telnet+IP,回車

登錄成功,接下來我們就可以安心地升級openSSH

7、下載關聯包

先看看本機有沒有以下軟件,沒有需要進行安裝,這幾個關聯包很重要如果沒有會導致ssh編譯安裝報錯,找不到包的請到開頭給的centos鏡像下載掛載:

# yum -y install openssl-devel  zlib-devel   pam-devel  

 

8、升級openSSH 備份舊ssh配置文件夾 /etc/ssh :

# cp -rf /etc/ssh /etc/ssh.bak

接下來就是解壓安裝OpenSSH,configure時注意ssl和zlib的文件目錄位置:

# tar -zvxf openssh-8.4p1.tar.gz

#  cd openssh-8.4p1

# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --without-hardening

# make && make install

如果編譯安裝中出現警告,把提示中的目錄進行提權:

 

# cd /etc/ssh   //一定要進入到ssh目錄中去,不然修改失敗ssh服務沒法啟動,無法啟動使用status查看
# chmod 600 ssh_host_rsa_key
# chmod 600 ssh_host_ecdsa_key
# chmod 600 ssh_host_ed25519_key

上面只能說明OpenSSH的客戶端開始使用新版本了,但openssh-server服務端還是在用舊版的,所以我們還需要修改一下ssh的服務文件,讓它開始使用新的版本,如果不進行替換,會出現openssh服務反復重啟的情況,而且sshd -t 也不會報錯信息

禁用原先的SSH服務,並移除服務文件

# systemctl disable sshd

# mv /usr/lib/systemd/system/sshd.service  ./sshd.service.bak

在OpenSSH_8.4p1源碼包/contrib/redhat/,把一些服務文件復制到系統中:

# cp /openssh-8.4p1/contrib/redhat/sshd.init /etc/init.d/sshd

# cp /openssh-8.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

#  chmod +x /etc/init.d/sshd

修改/etc/init.d/sshd中的SSHD路徑(不清楚的find搜索):

# vim /etc/init.d/sshd

SSHD=/usr/local/sbin/sshd

最后需要修改一下/etc/ssh/sshd_config 把#PermitRootLogin yes注釋打開,不然root沒法登錄

#  vim /etc/ssh/sshd_config
   PermitRootLogin yes

加入到系統服務,重啟sshd,查看版本成功升級到8.4p了:

# systemctl daemon-reload

# systemctl restart sshd

# systemctl enable sshd

# ssh -V  

 

報錯總結:

1、 上面的方法會覆蓋原版本的文件,make install覆蓋/etc/ssh下配置文件時可能會報錯。這時刪掉/etc/ssh下的原配置文件,再make install一次就可以了。

2、 如果使用root遠程無法登錄,修改/etc/ssh/sshd_config將 PermitRootLogin 參數改為yes

3、 沒有安裝openssl-devel openssh編譯安裝會出現“configure: error: *** zlib.h missing - please install first or check config.”報錯

4、沒有安裝pam-devel openssh編譯安裝會出現“ configure: error: PAM headers not found”

5、使用SecureCRT連接報錯Key exchange failed

處理方法:修改/etc/ssh/sshd_config配置文件,增加如下一行,使新版本持老版本的秘鑰交換算法。

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

最后,重啟sshd

參考博客:https://www.cnblogs.com/xjcn/p/13470254.html

 https://blog.csdn.net/hlg1995/article/details/85015643

http://blog.sina.com.cn/s/blog_7ce075830102wf0n.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM