Centos通过yum升级OpenSSH
在官方支持更新的CentOS版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用yum update就可以升级版本。
yum -y update openssh
但是,CentOS更新需要有一段时间,不能在漏洞刚出来的时候就有更新包。这时候就可以使用源码编译OpenSSH,来升级版本,修复漏洞。
源码编译安装OpenSSH
编译的时候需要一些依赖包及编译工具,需要先安装一下。
yum -y install wget tar gcc make wget openssl-devel pam-devel rpm-build
wget -c https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
(此链接需要翻**墙才能访问,我下载好放百度网盘里了)
wget -c https://www.openssl.org/source/openssl-1.1.1v.tar.gz --no-check-certificate
wget -c https://zlib.net/current/zlib.tar.gz
百度网盘
portable/openssh-9.4p1.tar.gz
链接:https://pan.baidu.com/s/1yUP1ixDd3-Dfoc4fB0TH8A?pwd=o2im
提取码:o2im
tar zxvf openssh-9.4p1.tar.gz
tar zxvf openssl-1.1.1v.tar.gz
tar zxvf zlib-1.3.tar.gz
cd zlib-1.3
./configure --prefix=/usr/local/zlib
make&&make install
cd openssl-1.1.1v
./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-9.4p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl --without-zlib-version-check
make && make install
更改默认端口
vim /usr/local/openssh/etc/sshd_config
更改为
Port 2222
把上图的PermitRootLogin,PubkeyAuthentication的设置打开。
启动
/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。
更换sshd服务路径
vim /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端口,等升级完成,再关闭即可。