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服务,会导致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、开启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、重启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"
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
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
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
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
要包含include、lib、share上个目录。

新建并编辑配置文件:
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"
配置如下:
- 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的端口
#!/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
CentOS 升级 openSSH+ sh脚本自动运维的更多相关文章
- Linux轻量级自动运维工具-Ansible浅析【转】
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
- Linux轻量级自动运维工具-Ansible浅析 转
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
- Linux自动运维工具Ansible的使用
Linux自动运维工具Ansible的使用 我们熟悉这个工具后, 可以很轻松的安装k8s. 一.介绍 ansible - run a task on a target host(s) Ansible是 ...
- 解决CentOS无法显示中文字体 | 系统运维 | Web2.0
解决CentOS无法显示中文字体 | 系统运维 | Web2.0 About Me 博客园 devops 前端 张家港水蜜桃 傍晚好! 2013年09月12日 17:56:08 ...
- 编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略
简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可. ...
- 18.自动运维工具ansible
1 Ansible 介绍和架构 1.1 Ansible介绍 ansible 的名称来自科幻小说<安德的游戏>中跨越时空的即时通信工具,使用它可以在相距数光年的 距离,远程实时控制前线的舰队 ...
- 服务器sh脚本自动登录(mac)
一不小心自己也有三台虚拟机了,每次都ssh -username@ip 然后在输入密码着实蛋疼,第一反应时脚本登录,但是作为脚本是逐行执行命令,是无法做到等待一个密码提示出现在输入密码的.查到mac下可 ...
- CentOS 升级 openSSH
openSSH作为linux远程连接工具,容易受到攻击,必须更新版本来解决,低版本有如下等漏洞: a. OpenSSH 远程代码执行漏洞(CVE-2016-10009) b. OpenSSH aut ...
- centos升级openssh的两种方式
此文介绍的是服务器在有网络和无网络情况下升级openssh方式. 一.首先介绍一个无网络如何升级: 1.准备相关的包 openssh下载地址: http://mirror.internode.on. ...
随机推荐
- 第08课:【实战】Redis网络通信模块源码分析(1)
我们这里先研究redis-server端的网络通信模块.除去Redis本身的业务功能以外,Redis的网络通信模块实现思路和细节非常有代表性.由于网络通信模块的设计也是Linux C++后台开发一个很 ...
- mysql 在gtid环境下缺少一部分binlog部署从库
我的环境: 有两台linux服务器 一台是192.168.1.1 mysql 端口3301 一台是192.168.1.2 mysql 端口3303 要讨论如何恢复从库,我们得先来了解如下一些概 ...
- nginx防止跳转到内网解决
proxy_redirect http://test.abc.com:9080/ /;
- TCP/IP网络编程系列之一(初级)
概述 网络编程实际上就是编写程序使两台联网的计算机相互的交换数据.操作系统会提供名为“ 套接字 ”的部件.套接字是网络数据传输的软件设备,即使对网络数据传输原理不太熟悉也无关紧要.我们也能通过套接字完 ...
- thinkPHP5.0.22初体验---request相关用法
如果浏览器要返回美观排列的json数据,可以安装火狐浏览器的插件 返回XML的数据格式 渲染模板的用法 return $this->fetch('index/index2')效果 扒掉stirp ...
- 【51nod1792】Jabby's segment tree
题目 线段树是一种经典的数据结构,一颗[1,n]的线段树他的根是[1,n],当一个线段树的结点是[l,r]时,设mid=(l+r)>>1,则这个结点的左儿子右儿子分别是[l,mid],[m ...
- sleep() 、join()、yield()有什么区别
1sleep()方法 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).此操作受到系统计时器和调度程序精准和准确性的影响,让其他线程有机会继续执行,但是它不释放对象锁.也就是如果有synchron ...
- 图解数据库中的join操作
1.所有的join都从cross join衍生而来 2.所有join图示 转自Say NO to Venn Diagrams When Explaining JOINs
- go.js-拖拽流程图插件
1.去除水印 在文件中搜索7eba17a4ca3b1a8346,找到类似a.Jv=d[w.Jg("7eba17a4ca3b1a8346")][w.Jg("78a118b7 ...
- Spring Data JPA的Respository接口中查询方法