記錄openssl和openssh升級中遇到的問題以及解決方法


本文檔講述的升級操作是基於操作系統centos6.5,使用的openssl版本是openssl-1.0.2l.tar.gz,openssh版本是openssh-7.6p1.tar.gz。

1. 依賴檢查

檢查以下軟件是否安裝

#rpm -qa | grep gcc(檢查gcc是否安裝)
#yum install gcc(如果沒有gcc,安裝gcc,如果有,此步驟跳過)

#rpm -qa|grep pam(檢查pam是否安裝)
#yum install pam (如果沒有pam,安裝pam,如果有,此步驟跳過)

#rpm -qa|grep pam-devel(檢查pam-devel是否安裝)
#yum install pam-devel (如果沒有pam-devel,安裝pam-devel,如果有,此步驟跳過)
注意:pam-devel包必須與系統的pam包版本一致

#rpm -qa|grep zlib(檢查zlib是否安裝)
#yum install zlib(如果沒有zlib,安裝zlib,如果有,此步驟跳過)

#rpm -qa|grep zlib-devel(檢查zlib-devel是否安裝)
#yum install zlib-devel(如果沒有zlib-devel,安裝zlib-devel,如果有,此步驟跳過)

2. 開啟telnet服務和FTP服務

開啟telnet服務和ftp服務,防止升級ssh出現問題時,可以通過telnet登陸,以及通過ftp上傳文件。

2.1 檢查xinetd、telnet-server、vsftpd是否安裝

# rpm -qa | grep xinetd(檢查xinetd是否安裝)
# yum install xinetd(如果沒有,則安裝xinetd,否則跳過此步驟)

# rpm -qa | grep telnet-server(檢查telnet-server是否安裝)
# yum install telnet-server(如果沒有,則安裝telnet-server,否則跳過此步驟)

# rpm -qa | grep vsftpd(檢查vsftpd是否安裝)
# yum install vsftpd(如果沒有,則安裝vsftpd,否則跳過此步驟)

2.2 配置telnet

修改配置文件vim /etc/xinetd.d/telnet

service telnet
{
    flags           = REUSE
    socket_type     = stream        
    wait            = no
    user            = root
    server          = /usr/sbin/in.telnetd
    log_on_failure  += USERID
    #disable         = yes
    disable         = no
}

注意:將disable = yes 改為disable = no

2.3 啟動服務

chkconfig xinetd on (使telnet服務開機啟動,避免升級過程中服務器意外重啟后無法遠程登錄系統)
mv /etc/securetty /etc/securetty.old    #允許root用戶通過telnet登錄 
service xinetd start(啟動telnet服務)
service vsftpd start(啟動ftp服務)

telnet服務開啟后,測試下是否能通過telnet成功登陸

3. OpenSSL升級

下載地址:http://www.openssl.org/source
根據ssl安裝目錄不同,這里介紹兩種升級方式。

3.1 備份當前ssl

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
mv /usr/lib64/libssl.so.1.0.1e /usr/lib64/libssl.so.1.0.1e.old

3.2 方法一(安裝在/usr/local/openssl下)

(1) 卸載舊版本

rpm -qa | grep openssl (查看當前安裝的版本)
# 使用rpm命令卸載舊版本
rpm -e --nodeps openssl-1.0.0-27.el6.x86_64
rpm -e --nodeps openssl-devel-1.0.0-27.el6.x86_64

(2)安裝openssl

tar -zxvf openssl-1.0.2l.tar.gz (解壓文件)
cd openssl-1.0.2l
./config --prefix=/usr/local/openssl shared
make
make test(進行 SSL 加密協議的完整測試,如果出現錯誤就要一定先找出哪里的原因,否則一味繼續可能導致最終 SSH 不能使用)
make install

#設置軟鏈接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so
ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10
ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

#將 OpenSSL 的動態鏈接庫地址寫入動態鏈接裝入器(dynamic loader)
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
#重新加載動態鏈接庫
ldconfig -v

#查看當前系統的openssl版本
openssl version -a

3.3 方法二(安裝在/usr目錄下)

安裝在/usr目錄下,會覆蓋舊版本數據
(1) 卸載舊版本

rpm -qa | grep openssl (查看當前安裝的版本)
#使用rpm命令卸載舊版本
rpm -e --nodeps openssl-1.0.0-27.el6.x86_64
rpm -e --nodeps openssl-devel-1.0.0-27.el6.x86_64

(2) 安裝openssl

tar -zxvf openssl-1.0.2l.tar.gz (解壓文件)
cd openssl-1.0.2l
./config --prefix=/usr --shared
make
make test(進行 SSL 加密協議的完整測試,如果出現錯誤就要一定先找出哪里的原因,否則一味繼續可能導致最終 SSH 不能使用)
make install

#設置軟鏈接
ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10
ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

#查看當前系統的openssl版本
openssl version -a

4. OpenSSH升級

下載地址:http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable
(1) 備份當前ssh

mv /etc/ssh /etc/ssh.old 
mv /etc/init.d/sshd /etc/init.d/sshd.old

(2) 卸載舊版本

rpm -e --nodeps `rpm -qa | grep openssh`

(3) 安裝ssh

tar -zxvf openssh-7.6p1.tar.gz (解壓)
cd openssh-7.6p1
./configure --prefix=/usr --with-zlib --sysconfdir=/etc/ssh --with-ssl-dir=/usr --with-md5-passwords --with-pam(注意:如果使用方法一安裝openssl,要將--with-ssl-dir=/usr改為--with-ssl-dir=/usr/local/openssl)
make
make install

#驗證openssh版本
ssh -V

(4) 啟動ssh服務

cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
chkconfig --list sshd
service sshd restart

注意:如果升級操作一直是在ssh遠程會話中進行的,上述sshd服務重啟命令可能導致會話斷開並無法使用ssh再行登入(即ssh未能成功重啟),此時需要通過telnet登入再執行sshd服務重啟命令

5. 系統功能驗證后關閉telnet服務

驗證系統是否正常,沒有問題再關閉telnet服務

mv /etc/securetty.old /etc/securetty 
chkconfig xinetd off 
service xinetd stop 

如需還原之前的ssh配置信息,可直接刪除升級后的配置信息,恢復備份。

rm -rf /etc/ssh 
mv /etc/ssh.old /etc/ssh

6. FAQ

卸載openssl后,升級安裝后,執行某些命令時,可能會遇到一些錯誤

6.1 libcrypto.so.10錯誤

錯誤提示:error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
原因:軟鏈接/usr/lib64/libcrypto.so.10不存在
解決方法:ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10,或者是 ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10(根據openssl的實際安裝路徑來決定)

6.2 libssl.so.10錯誤

錯誤提示:libssl.so.10: cannot open shared object file: No such file or directory
原因:軟鏈接/usr/lib64/libssl.so.10不存在
解決方法:ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10,或者是ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10(根據openssl的實際安裝路徑來決定)

6.3 OpenSSL version mismatch錯誤

錯誤提示:sshd:OpenSSL version mismatch. Built against 10000003, you have 100020cf(注意:由於安裝的ssl版本不同,錯誤提示可能不同,表現在10000003、100020cf上)
原因:ssh和ssl版本不匹配
解決方法:卸載系統自帶的openssh,安裝和現有openssl版本匹配的openssh


免責聲明!

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



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