1. 程式人生 > >Centos6.5 離線 Openssh 升級

Centos6.5 離線 Openssh 升級

[toc] ## OpenSSH 升級 **升級機器資訊收集** ``` OpenSSH/openssl 版本 OpenSSH_6.9p1, OpenSSL 1.0.2j-fips 26 Sep 2016 系統:CentOS release 6.5 (Final) 核心版本:2.6.32-431.el6.x86_64 ``` **離線操作說明:** 本文是離線操作的,其中依賴的所有的包,都是下載到本地,然後scp 或者其它方式上傳到我們的沒有外網的機器上的。 **主要流程為:** 1. 基於 Dropbear 設定備用 ssh 伺服器 2. 備份 SSH 配置 3. 編譯安裝 Openssl (按需) 4. 升級Openssh 5. 驗證 **風險點:** 1. 可能由於 `Openssh` 更新失敗,導致 `sshd` 服務異常,影響正常登陸。 2. 也可能存在上述內容升級過程中因依賴問題導致失敗。 ### 一、基於 Dropbear 設定備用 ssh 伺服器 Dropbear 是一個相對輕量級的SSH伺服器和客戶端。它是與 OpenSSH `〜/ .ssh / authorized_keys`公鑰認證相容的。 我們通過`Dropbear` 搭建一個新的SSH 伺服器。 主要是為了避免在 升級 OpenSSH 的時候,ssh 連線異常,登陸不上伺服器。 > https://matt.ucc.asn.au/dropbear/dropbear.html 1. 配置一個新的SSH 服務 `dropbear` ```sh wget https://matt.ucc.asn.au/dropbear/dropbear-2020.80.tar.bz2 tar -xjf dropbear-2020.80.tar.bz2 cd dropbear-2020.80 ./configure && make && make scp && make install mkdir /etc/dropbear /usr/local/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key /usr/local/bin/dropbearkey -t rsa -s 4096 -f /etc/dropbear/dropbear_rsa_host_key /usr/local/sbin/dropbear -p 25022 # 這個加下到開機啟動中。 後面再除去。 ``` 2. 測試 `dropbear` 服務是否可以正常提供SSH 服務 1. 關閉 `sshd`,然後通過 `dropbear` 提供的埠進行登入。 仍然用原來的使用者和密碼。 ### 二、 Openssh 更新 升級版本為: `Openssh7.4` 與 阿里雲(ECS Centos7.7)版本一致。 `OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017` #### 2.1 ssh配置 備份 ``` cp -raf /etc/ssh /etc/ssh.bak2020 cp -raf /etc/init.d/sshd /etc/init.d/sshd.bak2020 cp -raf /root/.ssh/ /root/.ssh.bak2020 cp -raf /home/yeemiao/.ssh/ /home/yeemiao/.ssh.bak2020 ``` #### 2.2 openssh 升級 ```shell yum remove openssh # 解除安裝 openssh wget https://openbsd.mirror.netelligent.ca/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz tar -xzvf openssh-7.4p1.tar.gz cd openssh-7.4p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-ssl-dir=/usr/local/openssl102j/ # 注意 --with-ssl-dir 值為 openssl 安裝的目錄。 make && make install && install -v -m755 contrib/ssh-copy-id /usr/bin && install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1 && install -v -m755 -d /usr/share/doc/openssh-7.4p1 && install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.4p1 mv /etc/init.d/sshd /etc/init.d/sshd.bak2020_2 cp -raf /etc/init.d/sshd.bak2020 /etc/init.d/sshd mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2020_2 cp -raf /etc/ssh.bak2020/sshd_config /etc/ssh/sshd_config service sshd restart chkconfig sshd on ``` ### Openssl 升級(由於Openssh編譯失敗) 異常資訊: ``` error: *** Can't find recent OpenSSL libcrypto (see confiig.log) ``` 解決辦法: 重新編譯個 `openssl` 在測試環境這個問題沒有出現,可能由於正式環境原來編輯的 `openssl` 不完整,重新編譯下就行了。 重新編譯可以保留原來的 `openssl`, 然後使用一個新的目錄即可。 #### openssl 備份 ```shell cp -raf /usr/bin/openssl /usr/bin/openssl.old cp -raf /usr/include/openssl /usr/include/openssl.old cp -raf /usr/lib64/libssl.so /usr/lib64/libssl.so.lod cp -raf /usr/lib64/libssl.so.1.0.1e /usr/lib64/libssl.so.1.0.1e.old cp -raf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.10.old cp -raf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10.old ``` #### openssl 安裝 >`Openssl` 下載地址: https://www.openssl.org/source/old/1.0.2/ 我這使用的版本是 ` openssl-1.0.2j` ```shell tar -xzvf openssl-1.0.2j.tar.gz cd openssl-1.0.2j/ ./config --prefix=/usr/local/openssl102j shared make && echo $? make test && echo $? make install && echo $? ``` ### openssl 配置 ```shell # 以下刪除的前面都已經備份 rm -rf /usr/bin/openssl ln -s /usr/local/openssl102j/bin/openssl /usr/bin/openssl rm /usr/include/openssl ln -s /usr/local/openssl102j/include/openssl /usr/include/openssl rm /usr/lib64/libssl.so ln -s /usr/local/openssl102j/lib/libssl.so.1.0.0 /usr/lib64/libssl.so rm /usr/lib64/libssl.so.10 ln -s /usr/local/openssl102j/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10 rm /usr/lib64/libcrypto.so.10 ln -s /usr/local/openssl102j/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10 echo "/usr/local/openssl102j/lib" >> /etc/ld.so.conf ``` 載入依賴和檢查 ```shell ldconfig -v openssl version -a ``` ### 參考文獻 `Openssl` 下載地址: https://www.openssl.org/source/old/1.0.2/ https://www.cnblogs.com/leekeggs/p/9557205.html https://blog.csdn.net/u012949658/article/details/5