CentOS 升级 openSSH + sh脚本自动运维

转帖:https://www.cnblogs.com/zhoading/p/13952388.html,感谢!

openSSH作为linux远程连接工具,容易受到攻击,必须更新版本来解决,低版本有如下等漏洞:

OpenSSH 安全漏洞(CVE-2021-41617)

OpenSSH 命令注入漏洞(CVE-2020-15778)

OpenSSH 安全漏洞(CVE-2017-15906)

OpenSSH 用户枚举漏洞(CVE-2018-15473)【原理扫描】

OpenSSH 用户枚举漏洞(CVE-2018-15919)

OpenSSH信息泄露漏洞(CVE-2020-14145)

OpenSSH 安全漏洞(CVE-2016-20012)

升级前漏洞扫描:

升级后openSHH版本:

主机系统centos7.4.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.2k

OpenSSH 7.4p1 > OpenSSH 8.9p1

step 3、开启telnet(或者安装vnc)

一、开启telnet

临时开启telnet服务,用于升级ssh,同时方总升级ssh过程中主机无法登录。

1、挂载操作系统镜像

2、安装ftp所需系统包

yum -y install xinetd telnet*

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、重启telnet和xinetd服务【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

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"

2022-3-24 15:00 

yum -y install tigervnc-server tigervnc vnc vnc-server

2)配置vnc连接

配置服务:

cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service

修改服务:

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

找到这一行

ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i"

PIDFile=/home/root/.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-8.9p1.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 install -y lsof net-tools wget telnet* gcc make perl zlib zlib-devel pam pam-devel openssl*

step 8、正式开始升级openssh

PS: telnet登录操作,升级顺序: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

yum -y reinstall zlib

验证zlib安装是否成功

ll /usr/local/zlib

要包含include、lib、share上个目录。

新建并编辑配置文件:

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

加入如下内容后保存退出

/usr/local/zlib/lib

刷新库文件,加载刚才编译安装的zlib生成的库文件

ldconfig -v

4、升级OpenSSL

yum -y reinstall openssl

刷新库文件,加载刚才编译安装的ssl生成的库文件

ldconfig -v

查看openssl版本

openssl version -a

5、升级OpenSSH

重命名原有配置文件

mv /etc/ssh /etc/ssh.bak

安装openssh

cd /soft/openssh

tar -xzvf openssh-8.9p1.tar.gz

cd openssh-8.9p1

./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --mandir=/usr/share/man 

make

make install

6、验证openssh版本

(没启动)升级后

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

7、设置sshd服务开机自动启动

拷贝配置文件

cp ~/soft/openssh-8.9p1/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-8.9p1/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 /soft/openssh/openssh-8.9p1/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.

[email protected]'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"

配置如下:

echo -n $"Starting $prog:"

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

$SSHD $OPTIONS && success || failure

RETVAL=$?

保存退出。

重启sshd服务:

systemctl restart sshd

再次登录就可以了。

写sh脚本,自动升级

新建脚本update_openssh.sh,加上以下内容,后面直接执行此脚本,即可。

注意:脚本里面指定了版本,你可以更改一下想要升级的版本,还有就是可能你的系统目录不一样,自己可以相应改一下,建议先在本地测试一下,线上系统不要轻易尝试,升级前需要开启telnet,防止升级失败,系统无法登录,对应的防火墙需要开启telnet的端口

自动脚本,step1:


#!/bin/bash

##2022 03 25 17:18:55

###安装相关依赖包###

yum install -y lsof net-tools wget telnet* gcc make perl zlib zlib-devel pam pam-devel openssl*

#

#yum install -y openssl-devel

###准备参数###

file=/soft

#

zlib=https://www.zlib.net/zlib-1.2.11.tar.gz

#

openssl=https://www.openssl.org/source/openssl-1.1.1n.tar.gz

#

openssh=https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.9p1.tar.gz

#

###创建目录###

#

mkdir -p $file/zlib

#

mkdir -p $file/openssl

#

mkdir -p $file/openssh

#

mkdir -p /usr/local/openssh/bin/ssh

###下载安装包###

cd $file

#

#wget $zlib

#

#wget $openssl

#wget -c 断线续传

wget -c --no-check-certificate $openssh

###解压并进入到相关目录###

#tar -xzf zlib*.tar.gz -C $file/zlib

#

#tar -xzf openssl*.tar.gz -C $file/openssl

#

tar -xzf openssh*.tar.gz -C $file/openssh

#

Step 2,安装依赖


#!/bin/bash

##2022 03 25 17:18:55

###wget下载安装包,后操作###

file=/soft

###停止ssh服务,并卸载原有的openssh###

systemctl stop sshd

#

systemctl is-active sshd

#

#step 5、关闭防火墙和selinux

systemctl status firewalld.service

#检查防火墙状态,如果在运行停掉。

systemctl stop firewalld.service

#关闭开机自启动

systemctl disable firewalld

#

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

#

###安装zlib###

#

yum -y install zlib

#

ldconfig -v

#

###安装opensshl###

#

yum -y install openssl

#

ldconfig -v

#

openssl version -a

Step3:ssh升级


#!/bin/bash

##2022 03 25 17:18:55

#

#查看系统原有openssh包

rpm -qa | grep openssh

#根据上面查询出的结果,卸载系统里原有Openssh

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

#验证

rpm -qa | grep openssh

###升级openssh###

#

mv /etc/ssh /etc/ssh.bak

#ssh

cd /soft/openssh/openssh*

#

./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --mandir=/usr/share/man

#

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 /soft/openssh/openssh-8.9p1/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

#查看22端口监听

netstat -an |grep LISTEN|grep :22

你可能感兴趣的:(CentOS 升级 openSSH + sh脚本自动运维)