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
本地登入測試
[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
再次登入就可以了。