首先打開telnet預防升級ssh不成功導致遠程連接無法使用
1、安裝telnet並開啟
yum -y install telnet-server telnet xinetd
配置telnet,xinetd必須設置開機自啟動不然無法啟動
systemctl enable xinetd
systemctl enable telnet.socker
systemctl enable telnet.socket
systemctl enable xinetd
2、設置允許root連接(默認不允許root連接)
主機端執行 tail -f /var/log/secure
客戶端 telnet連接輸入用戶名:root
主機跳出信息如截圖
這個pts/2(請根據彈出信息靈活修改)就是登錄需要開放的,需要在/etc/securetty里面添加pts/2,即可使用root正常連接。
開始升級源碼openssh,本人使用了三個版本的源碼包,包括openssh-8.2p1.tar.gz、
openssl-1.1.1g.tar.gz、zlib-1.2.11.tar.gz
1、安裝gcc、make命令
yum -y install gcc make
2、解壓進入開始編譯安裝三個軟件
tar zxvf openssh-8.2p1.tar.gz
tar zxvf openssl-1.1.1g.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11./configure --prefix=/usr/local/zlib
make && make install
cd ../openssl-1.1.1g
./config --prefix=/usr/local/ssl -d shared
#默認沒有編譯出.so的文件,而openssh編譯的時候需要,所以需要手動添加 -d shared的選項
make && make install
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
cd ../openssh-8.2p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
如果是采用root用戶登錄需要,修改openssh的配置文件 /usr/local/openssh/etc/sshd_config(取消PermitRootLogin注釋並改為yes)
3、關掉舊的ssh啟動新的ssh
ps -ef|grep sshd 直接殺死 /usr/bin/sshd的進程號
再/usr/local/openssh/sbin/sshd啟動新的ssh
4、替換/bin下的ssh為新版的ssh
mv /usr/bin/ssh /usr/bin/ssh_bak
cp /usr/local/openssh/bin/ssh /usr/bin
此時執行ssh -V即可查看現有ssh和ssl版本。
5、替換/sbin下的sshd方便開機自動啟動
mv /usr/sbin/sshd /usr/sbin/sshd_bak
cp /usr/local/openssh/sbin/sshd /usr/sbin/
6、替換openssl命令
mv /usr/bin/openssl /usr/bin/openssl_bak
cp /usr/local/ssl/bin/openssl /usr/bin/
7.打開新的ssh服務開機自啟動
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
sshd.init 在/usr/local/openssh-8.2p1/contrib/redhat/sshd.init(解壓路徑下)
升級遇到過的問題
1、如果按照我的流程走一般不會有問題,但是如果例如未在ssl編譯處添加 -d share openssh編譯容易報以下錯誤
此時為缺少openssl的動態庫可以通過yum -y install openssl-devel 解決,安裝過后編譯就不需要指定openssl的具體路徑了,指定至上一級即可(ssh就直接使用了yum的ssl不用源碼)
2、還有編譯openssl遇到缺少類似perl包的報錯,一般直接yum裝一下即可解決。
最后記得關掉你的telnet並取消開機自啟動(明文傳輸不安全)