1. 程式人生 > >centos7.3升級openssh到7.7p1後root使用者無法登陸的問題

centos7.3升級openssh到7.7p1後root使用者無法登陸的問題

主機系統centos7.3.1161升級openssh到當前最新版7.7p1以後使用root使用者無法登陸,一直提示使用者名稱密碼錯誤(實際上使用者名稱密碼是對的)。下面對這個坑進行說明。

step 1 、升級前提說明:

1、升級OpenSSH後,原有公鑰失效,信任關係需要重新配置;
2、升級過程需要停止sshd服務,會導致ssh和sftp無法使用;
3、升級OpenSSH影響的業務有:QDG同步、Mediation及現場自己寫的同步指令碼等;
4、升級需要關閉防火牆服務;
5、升級需要關閉selinux服務;
6、升級前需要開啟telnet,防止升級失敗,系統無法登入,對應的防火牆需要開啟23埠,安裝需要telnet相關包(推薦通過系統ISO安裝)
7、升級過程中需要重新整理lib庫:ldconfig -v;
8、升級順序:順序是zlib庫-> openssl -> openssh;

9、升級需要gcc、make、perl、zlib、zlib-devel、pam、pam-devel;

step 2 、版本升級說明

zlib-1.2.3 > zlib-1.2.11
OpenSSL 1.0.1e > OpenSSL 1.0.2o

OpenSSH 5.3p1 > OpenSSH 7.7p1

step 3、關閉防火牆和selinux

systemctl status  firewalld.service

檢查防火牆狀態,如果在執行停掉。

systemctl stop firewalld.service

關閉開機自啟動

systemctl disable firewalld

step 4 、驗證selinux是否關閉

getenforce

如果未關閉,關閉之

setenforce 0

上面只是臨時關閉了,重啟後不生效。下面改配置檔案,使永久生效。

vi /etc/selinux/config

修改:

SELINUX=disabled

儲存退出。

step 5、安裝包準備

1、軟體包下載地址:

zlib下載地址:

http://www.zlib.net/

zlib-1.2.11.tar.gz


https://www.openssl.org/source/


https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/

openssh-7.7p1.tar.gz


2、建立上傳目錄

# mkdir /soft/zlib
# mkdir /soft/openssl

# mkdir /soft/openssh

3、bin模式上傳介質

step 6、開啟telnet

臨時開啟telnet服務,用於升級ssh,同時方總升級ssh過程中主機無法登入。

1、掛載作業系統映象

2、安裝ftp所需系統包

yum -y install xinetd telnet telnet-server

3、改/etc/pam.d/login配置檔案

編輯/etc/pam.d/login,註釋掉下面這行,允許root使用者通過telnet登陸:

#auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

4、編輯/etc/securetty

編輯/etc/securetty,新增超級使用者登陸裝置。

備份/etc/securetty檔案:

cp /etc/securetty /etc/securetty.bak

新增超級使用者登陸裝置至/etc/securetty檔案:

echo "pts/1" >> /etc/securetty
echo "pts/2" >> /etc/securetty
echo "pts/3" >> /etc/securetty
echo "pts/4" >> /etc/securetty
echo "pts/5" >> /etc/securetty
echo "pts/6" >> /etc/securetty

echo "pts/7" >> /etc/securetty

echo "pts/8" >> /etc/securetty

echo "pts/9" >> /etc/securetty
echo "pts/10" >> /etc/securetty

echo "pts/11" >> /etc/securetty

5、編輯/etc/pam.d/remote

編輯/etc/pam.d/remote,註釋下列這行,開啟root使用者遠端登陸:

vi /etc/pam.d/remote

#auth required pam_securetty.so

6、重啟telnet和xinetd服務

PS:telnet服務依賴於xinetd服務。

systemctl start telnet.socket

systemctl start xinetd

PS:如果開啟了防火牆,需要將23埠(系統預設23為telnet埠)新增到防火牆允許的埠的列表中。

7、開啟telnet和xinetd開機自動啟動

systemctl enable xinetd.service

systemctl enable telnet.socket

8、驗證開機啟動

systemctl list-unit-files |grep telnet

systemctl list-unit-files |grep xinetd

step 7、安裝openssh升級依賴包

yum -y install gcc make perl zlib zlib-devel pam pam-devel

檢查相關依賴包是否安裝

rpm -qa | egrep "gcc|make|perl|zlib|zlib-devel|pam|pam-devel"

step 8、正式開始升級openssh

PS: telnet登入操作,升級順序:zlib庫-> openssl -> openssh。

1、停止sshd服務

systemctl stop sshd

systemctl is-active sshd

2、解除安裝系統裡原有Openssh

檢視系統原有openssh包

rpm -qa | grep openssh

根據上面查詢出的結果,解除安裝系統裡原有Openssh

rpm -e openssh --nodeps

rpm -e openssh-server --nodeps

rpm -e openssh-clients --nodeps

驗證

rpm -qa | grep openssh

3、編譯安裝zlib

解壓安裝zlib

cd /soft/zlib

tar -xzvf zlib-1.2.11.tar.gz

cd zlib-1.2.11

./configure --prefix=/usr/local/zlib

make&&make install

驗證zlib安裝是否成功

cd /usr/local/zlib

ll

要包含include、lib、share上個目錄。

編輯配置檔案/etc/ld.so.conf.d/zlib.conf

vi /etc/ld.so.conf.d/zlib.conf

加入如下內容後儲存退出

/usr/local/zlib/lib

重新整理庫檔案

ldconfig -v,重新整理庫檔案,載入剛才編譯安裝的zlib生成的庫檔案

ldconfig -v

4、升級OpenSSL

解壓安裝openssl包

cd /soft/openssl

tar -xzvf openssl-1.0.2o.tar.gz

編譯openssl

cd openssl-1.0.2o

./config shared zlib

make

make test

make install

重新命名現有檔案目錄

mv /usr/bin/openssl /usr/bin/openssl.OFF

建立ssl相關軟連線

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/ssl/include/openssl /usr/include/openssl

編輯配置檔案/etc/ld.so.conf.d/ssl.conf

vi /etc/ld.so.conf.d/ssl.conf

加入如下內容後儲存退出

/usr/local/ssl/lib

重新整理庫檔案

ldconfig -v,重新整理庫檔案,載入剛才編譯安裝的ssl生成的庫檔案

ldconfig -v

檢視openssl版本

openssl version -a

5、升級OpenSSH

重新命名原有配置檔案

mv /etc/ssh /etc/ssh.bak

解壓openssh

cd /soft/openssh

tar -xzvf openssh-7.7p1.tar.gz

cd openssh-7.7p1

./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl --mandir=/usr/share/man --with-zlib=/usr/local/zlib

上面為一行。

make

make install

驗證openssh版本

/usr/local/openssh/bin/ssh -V

設定sshd服務開機自動啟動

拷貝配置檔案

cp /soft/openssh/openssh-7.7p1/contrib/redhat/sshd.init /etc/init.d/sshd

修改配置檔案許可權

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

新增sshd服務

chkconfig --add sshd

驗證開機啟動

chkconfig --list|grep sshd

替換配置檔案

cp /soft/openssh/openssh-7.7p1/sshd_config /etc/ssh/sshd_config

編輯sshd_config檔案

將subsystem sftp路徑變更為實際路徑/usr/local/openssh/libexec/sftp-server

vi /etc/ssh/sshd_config

#Subsystem sftp /usr/libexec/sftp-server

註釋掉,換為如下一句:

Subsystem sftp /usr/local/openssh/libexec/sftp-server

拷貝命令

cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd

拷貝sshd命令至/usr/bin/

cp /usr/local/openssh/bin/ssh /usr/bin/

ssh -V

拷貝ssh-keygen

cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen

修改配置檔案/etc/ssh/sshd_config

vi /etc/ssh/sshd_config

PasswordAuthentication yes #取消這一行註釋

PermitRootLogin yes #新增PermitRootLogin yes行

PS:如果不允許root使用者遠端直接登入,這裡配置為PermitRootLogin no;

重啟sshd服務

service sshd restart

systemctl is-active sshd

檢視22埠監聽

netstat -an |grep LISTEN|grep :22

本地登入測試

ssh [email protected]

[email protected][/data/openssh]#ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

[email protected]'s password: 

使用root使用者,其實密碼是對的,報錯。

如果是用普通使用者:

[email protected][/data/openssh]#ssh [email protected]
[email protected]'s password: 
Last login: Sat May 19 12:24:33 2018 from 192.168.254.36

[email protected][/home/wufan]$

是可以的。

下面修改:

vi /etc/init.d/sshd

在$SSHD $OPTIONS && success || failure這句話前面加一句:

OPTIONS="-f /etc/ssh/sshd_config"

配置如下:

        echo -n $"Starting $prog:"
        OPTIONS="-f /etc/ssh/sshd_config"
        $SSHD $OPTIONS && success || failure
        RETVAL=$?

儲存退出。

重啟sshd服務:

systemctl restart sshd

再次登入就可以了。