SSH远程连接又有漏洞要升级(亲测可行)

395 阅读4分钟

故事背景

最近SSH远程连接又爆出漏洞,需要升级,喜闻乐见。上次已经升级过一次,有两台机升级成功,两台机升到一半失败了,说无法在目录中创建文件,root的权限也无法创建就很奇怪,使用sudo也不行,怀疑是运维对这个root账号权限做了什么管控...SSH升级失败的话如果断了再次登录就登不上了,最尴尬的是上次用那个CDSN的文章,备份的文件少了两个。。结果就是还原不了原版本,最后用了各种方法,加班2个钟终于回滚了原来的版本,好像是用yum install openssh搞定了。

准备工作

1、升级SSH存在中断风险,如果SSH升级失败将会导致终端无法登录,建议在使用本地虚拟机进行测试后对线上生产环境进行升级操作!!

2、升级有风险操作需谨慎,务必先要安装好telnet后再升级,使用telnet兜底!!

3、 升级前一定要对ssh进行备份,避免更新失败时能回滚。

4、升级前一定要提前在测试环境验证,运行一段时间,确认没有问题才可在生产环境进行更新操作。

5、对于生产环境主机数量比较多时,建议先在1台或几台服务器上更新,运行一段时间,确认没有问题再执行批量更新操作。

开启telnet可参考之前的文章: juejin.cn/post/735014…

对于一些旧的服务器,运行第一句yum install xxx就报错了。。

image.png

不是404就是解析不到host,百度之后发现默认的yum镜像源都是外网连不上,需要更换成阿里云镜像。

##1、查询是否通网络
ping baidu.com
##2、备份配置文件
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
##3、替换为阿里云镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
##4、清理缓存并重新生成缓存
yum clean all
yum makecache

更换完之后服务器能正常使用yum下载软件

升级SSH

升级SSH参考链接:blog.csdn.net/qq_25983579…

1、安装依赖和安装包

yum install -y gcc gcc-c++ perl perl-IPC-Cmd pam pam-devel

cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.1.0.tar.gz --no-check-certificate
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz 
wget https://www.zlib.net/fossils/zlib-1.2.13.tar.gz
tar axf openssh-9.9p1.tar.gz && tar axf openssl-3.1.0.tar.gz && tar axf zlib-1.2.13.tar.gz

2、备份文件

##备份openssl
mv /usr/bin/openssl /usr/bin/openssl.old

##备份openssh
mv /etc/ssh /etc/ssh.bak
mkdir /usr/bin/bak
\cp -arpf /usr/bin/{cp,sftp,ssh,ssh-add,ssh-agent,ssh-keygen,ssh-keyscan} /usr/bin/bak/
\cp -arpf /usr/sbin/sshd /usr/sbin/sshd.bak
\cp -arpf /etc/sysconfig/sshd /etc/sysconfig/sshd.bak
\cp -arpf /etc/pam.d/sshd /etc/pam.d/sshd.bak

3、安装zlib和openssl

##安装zlib
cd zlib-1.2.13 
./configure --prefix=/usr/local/zlib-1.2.13 && make -j 4 && make install

##安装openssl
cd openssl-3.1.0 
./config --prefix=/usr/local/openssl-3.1.0 
make -j 4 && make install

##编辑ld.so.conf文件
echo '/usr/local/openssl-3.1.0/lib64' >> /etc/ld.so.conf
ldconfig -v

##创建操作系统软链接
ln -s /usr/local/openssl-3.1.0/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-3.1.0/include/openssl /usr/include/openssl
ll -s /usr/bin/openssl
ll -s /usr/include/openssl

##检查Openssl版本
openssl version

4、安装openssh

##编译安装
cd openssh-9.3p1
./configure --prefix=/usr/local/openssh-9.3p1 --sysconfdir=/etc/ssh --with-pam \
--with-ssl-dir=/usr/local/openssl-3.1.0 --with-zlib=/usr/local/zlib-1.2.13 --without-hardening
make && make install

##替换新版本openssh相关命令
\cp -arpf /usr/local/openssh-9.3p1/bin/scp /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/sftp /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-add /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-agent /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-keygen /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-keyscan /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/sbin/sshd /usr/sbin/sshd

##拷贝启动脚本
\cp -a contrib/redhat/sshd.init /etc/init.d/sshd
\cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak

##修改配置文件
vi /etc/ssh/sshd_config 
PermitRootLogin yes
PasswordAuthentication yes
UsePAM no
UseDNS no

##设置开机启动,并验证版本
systemctl daemon-reload 
systemctl enable sshd.socket
sshd -t
systemctl restart sshd
ssh -V

命令亲测可行,记得升级完测试一下ssh是否正常连接,可以正常连接才关闭当前窗口。如果安装过程中有问题需要回退到SSH旧版本。

5、回退openssh

在升级openssh的过程可能会升级失败,这时候需要回退ssh版本。

##恢复/etc/ssh目录
rm -rf /etc/ssh
mv /etc/ssh.bak /etc/ssh
##恢复cp、sftp、ssh、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan命令
\cp -arpf /usr/bin/bak/cp /usr/bin/cp
\cp -arpf /usr/bin/bak/sftp /usr/bin/sftp 
\cp -arpf /usr/bin/bak/ssh /usr/bin/ssh 
\cp -arpf /usr/bin/bak/ssh-add /usr/bin/ssh-add 
\cp -arpf /usr/bin/bak/ssh-agent /usr/bin/ssh-agent 
\cp -arpf /usr/bin/bak/ssh-keygen /usr/bin/ssh-keygen 
\cp -arpf /usr/bin/bak/ssh-keyscan /usr/bin/ssh-keyscan 
rm -rf /usr/bin/bak

##恢复sshd命令
\mv /usr/sbin/sshd.bak /usr/sbin/sshd 
\mv /etc/sysconfig/sshd.bak /etc/sysconfig/sshd
##重启sshd服务
systemctl daemon-reload
systemctl restart sshd

一键升级脚本

我们有很多台机,有一些是ssh已经升级好的了,我用history命令查看了一下他们有没有一键升级的脚本,结果发现还真的有,脚本可以自行按需修改,其实步骤跟上面的差不多,只是用shell脚本做了一下封装,参考链接:

blog.csdn.net/jummewu/art…

我看我们的脚本添加了一个yum的镜像源设置,因为一般的linux系统镜像源可能都是用不了的...

#自行新增部分
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak #备份yum配置文件
wget http://bsy.apkdl.aisee.tv/CentOS-Base.repo -P /etc/yum.repos.d        #下载新的yum配置文件 

最好还是要安装telnet登录和做好备份,以免安装失败造成ssh连接不上的情况。