CentOS 升級 openSSH+ sh腳本自動運維


 升級前后對比

 

  openSSH作為linux遠程連接工具,容易受到攻擊,必須更新版本來解決,低版本有如下等漏洞:

 

           OpenSSH 遠程代碼執行漏洞(CVE-2016-10009)

                OpenSSH auth_password函數拒絕服務漏洞(CVE-2016-6515)

                OpenSSH 遠程代碼執行漏洞(CVE-2016-10009)

 

 

 

升級前漏洞掃描和openSHH版本:

 

 

 

升級后漏洞掃描和openSHH版本:

 

 

 

 

 

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

step 1 、升級前提說明:

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

9、升級需要gccmakeperlzlibzlib-develpampam-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開啟telnet(或者安裝vnc

一、開啟telnet

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

1、掛載操作系統鏡像

2、安裝ftp所需系統包

yum -y install xinetd telnet telnet-server

 

3、允許root用戶通過telnet登陸:

編輯/etc/pam.d/login,注釋掉下面這行

 

vi /etc/pam.d/login

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

 

 

4、配置/etc/securetty

 

  先備份/etc/securetty文件:

 

cp /etc/securetty /etc/securetty.bak

       

  再配置

vi /etc/securetty

  添加超級用戶登陸設備。

  添加超級用戶登陸設備至/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、開啟root用戶遠程登陸

  編輯/etc/pam.d/remote,注釋下列這行

vi /etc/pam.d/remote

#auth required pam_securetty.so

 

6、重啟telnetxinetd服務【telnet服務依賴於xinetd服務】

 

systemctl start telnet.socket

systemctl start xinetd

PS:如果開啟了防火牆,需要將23端口(系統默認23telnet端口)添加到防火牆允許的端口的列表中。

 

7、開啟telnetxinetd開機自動啟動

 

systemctl enable xinetd.service

systemctl enable telnet.socket

 

8、驗證開機啟動

 

systemctl list-unit-files |grep telnet

systemctl list-unit-files |grep xinetd

 

9、驗證

telnet xxx.xxx.xx.xx

 

 

 

二、安裝vnc

 

參考https://www.cnblogs.com/kevingrace/p/5821450.html,根據自己的需要進行選擇性操作,如果做了防火牆,會攔截vnc服務或端口,我這里是直接安裝,在檢驗的時候,才去設置防火牆:

 

1)安裝vnc:


   yum update
   yum groupinstall "GNOME Desktop" "X Window System" "Desktop" 
   yum install tigervnc-server tigervnc vnc vnc-server

 

2)配置vnc連接

配置服務:


  cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service


修改服務:

  vi /etc/systemd/system/vncserver@:1.service 


找到這一行
  ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
  PIDFile=/home/<USER>/.vnc/%H%i.pid

 

 

這里直接用root 用戶登錄為例,(其他用戶同理)

  進入編輯模式:

  i

  修改為:
    ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
    PIDFile=/root/.vnc/%H%i.pid

  退出保存:

    Esc+:+wq

 

 

VNC設密碼(比如密碼設置為123456
  vncpasswd

  123456

  123456

 

重加載 systemd


  systemctl daemon-reload

 

啟動vnc


  systemctl enable vncserver@:1.service

  systemctl start vncserver@:1.service

 

3)檢查vnc連接

 

1】通過端口檢查

lsof -i:5901

 

 

2】進程檢查

ps -ef | grep Xvnc

 

 

3】服務檢查

systemctl status vncserver@:1.service

 

 

 

4】桌面VNC_Viewer連接測試:在兩個互通的主機之間測試

 

前面三個檢查都正常,但是在VNC_Viewer連接不上:很可能是防火牆的問題,現在就需要去設置防火牆(iptables或firewalld)了:

 

 

 

 

1)iptables設置端口白名單:

vi /etc/sysconfig/iptables

-A INPUT -p tcp -m tcp --dport 5901 -j ACCEPT

service iptables restart

 

 

 

2)關閉firewalld:

systemctl status firewalld

systemctl stop firewalld

 

 

 

 

 

配置之后即可進行登錄

 

 

 

 

登錄之后,打開終端,即可進行操作(與CRT 、Xshell類似):

 

 

 

 

 

 

 

step 4、安裝包准備

1、軟件包下載地址:

 

zlib-1.2.11.tar.gz

 

http://www.zlib.net/

 

openssl-1.0.2o.tar.gz

 

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

 

openssh-7.7p1.tar.gz

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

 

 

2、創建上傳目錄

mkdir -p /soft/zlib

mkdir -p /soft/openssl

mkdir -p /soft/openssh

3、上傳下載的安裝包

 

 

 

step 5、關閉防火牆和selinux

 

systemctl status firewalld.service

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

systemctl stop firewalld.service

關閉開機自啟動

systemctl disable firewalld

step 6、驗證selinux是否關閉

檢查是否關閉:

getenforce

如果未關閉,關閉之

setenforce 0

getenforce

 

 

上面只是臨時關閉了,重啟后不生效。下面改配置文件,使永久生效。

  vi /etc/selinux/config

修改:

  SELINUX=disabled

保存退出。

 

 

step 7、安裝openssh升級依賴包

檢查相關依賴包是否安裝

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

 

 

我們這里看到是有的,如果沒有則安裝

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

 

step 8、正式開始升級openssh

PStelnet登錄操作,升級順序:zlib-> openssl -> openssh

1停止sshd服務

檢查

systemctl is-active sshd

停止

systemctl stop sshd

檢查

systemctl is-active sshd

 

停止之后,無法用ssh維護了,可以通過vnc或者telnet維護

 

 

 

2卸載系統里原有Openssh

查看系統原有openssh

rpm -qa | grep openssh

 

根據上面查詢出的結果,卸載系統里原有Openssh

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

 

驗證

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 test

make install

驗證zlib安裝是否成功

ll /usr/local/zlib

 

要包含includelibshare上個目錄。

 

 

新建並編輯配置文件

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

 

加入如下內容后保存退出

/usr/local/zlib/lib

 

刷新庫文件,加載剛才編譯安裝的zlib生成的庫文件

ldconfig -v

4升級OpenSSL

進入安裝包路徑

cd /soft/openssl

 

解壓安裝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.bak

創建ssl相關軟連接

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

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

 

 

編輯配置文件

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

加入如下內容后保存退出

/usr/local/ssl/lib

刷新庫文件,加載剛才編譯安裝的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

 

6驗證openssh版本

 

(沒啟動)升級后

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

 

 

 

7設置sshd服務開機自動啟動

拷貝配置文件

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

 

給sshd的配置文件執行權限

 

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

添加sshd服務

chkconfig --add sshd

驗證開機啟動

chkconfig --list|grep sshd

 

 

 

8、設置 ssh -V驗證碼版本

替換配置文件

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

ssh -V

 

 

 

 

 

9、密碼認證和允許root用戶遠程直接登錄

拷貝ssh-keygen

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

修改配置文件/etc/ssh/sshd_config

vi /etc/ssh/sshd_config

#PasswordAuthentication yes 行取消注釋

PasswordAuthentication yes

並下面添加

PermitRootLogin yes

 

 

 

 

PS:如果不允許root用戶遠程直接登錄,這里配置為PermitRootLogin no

10重啟sshd服務

啟動

service sshd restart

 

11、驗證sshd是否有效

1)驗證服務

systemctl is-active sshd

啟動后

 

 

啟動前

 

 

2查看22端口監聽

netstat -an |grep LISTEN|grep :22

啟動前

 

 

啟動后

 

 

3)直接CRT登錄

啟動前

 

 

 

啟動后

 

 

 

4)互通之前跳轉

啟動前,無法用ssh維護了,可以通過vnc或者telnet維護

 

 

 

啟動后

 

 

5本地登錄測試

ssh root@localhost

 

 

 

 

1】Root用戶

[root@localhost openssh-7.7p1]# ssh root@localhost

The authenticity of host '192.***.43.211 (192.**8.**.211)' can't be established.

ECDSA key fingerprint is SHA256:ri3JqvmpBItq8Ezz03Tzsom4oHs40pdsPLb+X9KyvMY.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.**8.**.211' (ECDSA) to the list of known hosts.

root@192.168.43.211's password:

Last login: Sat Aug  4 05:19:42 2018 from ::ffff:192.**8.**.212

 

使用root用戶登錄,正常,則成功報錯(一次性通過,未遇到報錯,報錯的請自己驗證),

【2】普通用戶

root@ocsdb1[/data/openssh]#ssh wufan@ocsdb1
wufan@ocsdb1's password: 
Last login: Sat May 19 12:24:33 2018 from 192.**8.**.211

wufan@ocsdb1[/home/wufan]$

是可以的。

下面修改:

vi /etc/init.d/sshd

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

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

配置如下:

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

保存退出。

重啟sshd服務:

systemctl restart sshd

再次登錄就可以了。

寫sh腳本,自動升級

新建腳本update_openssh.sh,加上以下內容,后面直接執行此腳本,即可。

注意:腳本里面指定了版本,你可以更改一下想要升級的版本,還有就是可能你的系統目錄不一樣,自己可以相應改一下,建議先在本地測試一下,線上系統不要輕易嘗試,升級前需要開啟telnet,防止升級失敗,系統無法登錄,對應的防火牆需要開啟telnet的端口

#!/bin/bash
##2019 03 12 15:45:55
###判斷是否需要安裝wget###
WGET=`rpm -qa | grep wget`
if [$WGET -z ];then
    yum install -y wget
fi
###准備參數###
file=/soft
zlib=http://www.zlib.net/zlib-1.2.11.tar.gz
openssl=https://www.openssl.org/source/openssl-1.0.2s.tar.gz
openssh=https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
###創建目錄###
mkdir -p $file/zlib
mkdir -p $file/openssl
mkdir -p $file/openssh
###下載安裝包###
cd $file
wget $zlib
wget $openssl
wget $openssh
###安裝相關依賴包###
yum install -y gcc make perl zlib zlib-devel pam pam-devel
###解壓並進入到相關目錄###
tar -xzf zlib*.tar.gz -C $file/zlib
tar -xzf openssl*.tar.gz -C $file/openssl
tar -xzf openssh*.tar.gz -C $file/openssh
###停止ssh服務,並卸載原有的openssh###
systemctl stop sshd
systemctl is-active sshd
rpm -e --nodeps `rpm -qa | grep openssh`
###安裝zlib###
cd $file/zlib/zlib*
./configure --prefix=/usr/local/zlib
make 
make test 
make install 
echo '/usr/local/zlib/lib' >> /etc/ld.so.conf.d/zlib.conf
ldconfig -v
###安裝opensshl###
cd $file/openssl/openssl*
./config shared zlib
make
make test
make install
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf.d/ssl.conf
ldconfig -v
openssl version -a
###升級openssh###
mv /etc/ssh /etc/ssh.bak
cd $file/openssh/openssh*
./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
/usr/local/openssh/bin/ssh -V
cp /soft/openssh/openssh*/contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
chkconfig --add sshd
chkconfig --list|grep sshd
cp /soft/openssh/openssh*/sshd_config /etc/ssh/sshd_config
sed -i 's/Subsystem/#Subsystem/g' /etc/ssh/sshd_config
echo 'Subsystem sftp /usr/local/openssh/libexec/sftp-server'>> /etc/ssh/sshd_config
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/
ssh -V
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
sed -i 's/#PasswordAuthentication\ yes/PasswordAuthentication\ yes/g' /etc/ssh/sshd_config
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
service sshd restart
systemctl is-active sshd

 


免責聲明!

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



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