前言

在 Linux 上,ssh 服务可以说是最重要的服务之一,远程管理基本都是使用这个了。然而如果出现漏洞,就存在很大的风险,需要及时升级 ssh 版本来修复漏洞。

Centos 通过 yum 升级 OpenSSH

在官方支持更新的 CentOS 版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用 yum update 就可以升级版本。

yum -y update  openssh

但是,CentOS 更新需要有一段时间,不能在漏洞刚出来的时候就有更新包。这时候就可以使用源码编译 OpenSSH,来升级版本,修复漏洞。

源码编译安装 OpenSSH

编译的时候需要一些依赖包及编译工具,需要先安装一下。

yum -y install wget   tar   gcc  make

wget -c https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz

wget -c https://www.openssl.org/source/openssl-1.0.2q.tar.gz

wget -c  http://36.248.244.147/files/723900000023DE00/www.zlib.net/zlib-1.2.11.tar.gz

tar zxvf  openssh-7.9p1.tar.gz

tar zxvf  openssl-1.0.2q.tar.gz

tar  zxvf  zlib-1.2.11.tar.gz

cd zlib-1.2.11

./configure --prefix=/usr/local/zlib

make  && make install

cd  ../openssl-1.0.2q

./config --prefix=/usr/local/ssl  -d shared

默认没有编译出.so 的文件,而 openssh 编译的时候需要,所以需要手动添加 -d shared 的选项

make && make install

echo '/usr/local/ssl/lib'  >> /etc/ld.so.conf

ldconfig -v

cd ../openssh-7.9p1

./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib  --with-ssl-dir=/usr/local/ssl

make  && make install

启动

/usr/local/openssh/sbin/sshd    -f   /usr/local/openssh/etc/sshd_config

如果不指定配置文件也可以,默认就是加载

/usr/local/openssh/etc/sshd_config

如果是 CentOS6 可以修改/etc/init.d/sshd 中的对应路径即可,如果是 CentOS 7 需要修改/usr/lib/systemd/system/sshd.service。

为了方便使用可以修改 PATH 变量

echo 'PATH=/usr/local/openssh/bin:/usr/local/openssh/sbin:$PATH'   >> /etc/profile

source  /etc/profile

ssh -V
OpenSSH_7.9p1, OpenSSL 1.0.2q  20 Nov 2018

回退

如果是使用 yum 一般都是没有问题,都是经过测试的。

如果是源码编译回退也是简单,只要把启动脚本里面的程序路径修改一下即可。

总结

升级过程一般不可能跑去机房蹲着升级;如果是 yum 升级,也是比较稳定的,直接重启 sshd 服务即可。

如果是源码编译呢?也可以直接 kill sshd 这个进程,远程是不会断开了,升级过程都不要断开,然后真的就连接不上了。

如果怕网络突然断开,导致远程连接不上,可以先启动 sshd 进程,使用 -f 制定另外的配置文件,端口指定非 22 端口,等升级完成,再关闭即可。