1 介绍
openssh 9.4版本已于8月10号发布,安全团队又催着要赶紧升级环境里的ssh版本,本文主要介绍Centos5、Centos6、Centos7下openssh 9.4源码编译rpm包以及批量升级服务器openssh版本的方法。关注公众号后台回复ssh可获取本文相关源码文件。
https://www.openssh.com/releasenotes.html
2 将源码编译为rpm包
2.1 编译脚本介绍
由于openssh官方只提供源码包,网上下载的rpm包有可能遇到各种依赖问题,因此我们选择自己将源码编译为rpm包来升级环境的openssh。当然编译过程也尽量简单化,这里我们直接使用开源的脚本进行编译。
https://github.com/boypt/openssh-rpms
编译需要涉及到很多开发软件的下载安装,建议使用一台虚拟机来进行操作。先下载编译脚本,解压
[root@etcd-1 ~]# wget https://github.com/boypt/openssh-rpms/archive/refs/heads/main.zip [root@etcd-1 ~]# unzip main.zip [root@etcd-1 ~]# cd openssh-rpms-main/
简单看下代码结构
-
compile.sh:编译脚本
-
el5、el6、el7:对应CentOS5、6、7三个系统,编译相关的参数由SPECS目录下的openssh.spec控制。编译好的rpm包放在RPMS目录下。
-
pullsrc.sh:openssh相关源码下载脚本
-
version.env:定义了openssh及openssl源码的版本信息
2.2 修改代码
先修改一下pullsrc.sh脚本,给wget添加上"--no-check-certificate"参数,否则可能因为证书问题导致源码下载失败。
另外默认openssh源码中是没有ssh-copy-id相关参数的,如果直接编译安装,会发现安装后没有ssh-copy-id命令,因此如果需要用到该命令,需要修改编译参数控制文件openssh.spec。本次要升级的环境为CentOS7,因此我只修改el7目录下的SPECS/openssh.speec文件,在如下位置添加一行。
install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id
继续修改el7目录下的SPECS/openssh.speec文件,在如下位置添加一行。
%attr(0755,root,root) %{_bindir}/ssh-copy-id
2.3 准备编译环境
[root@etcd-1 openssh-rpms-main]# yum groupinstall -y "Development Tools" [root@etcd-1 openssh-rpms-main]# yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel
2.4 拉取源码并编译打包
[root@etcd-1 openssh-rpms-main]# bash pullsrc.sh ##拉去源码包
执行完成后检查下download目录,相关的源码包是否已下载好,服务器没有网络,可以从下面的链接直接下载好传到download目录下。
https://www.openssl.org/source//openssl-1.1.1v.tar.gz
https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
执行源码打包脚本
[root@etcd-1 openssh-rpms-main]# bash compile.sh
编译完成检查编译是否成功
检查rpm包是否都以打包好
3 批量升级服务器openssh版本至9.4
3.1 脚本介绍
脚本会用到ansible,因此执行脚本的服务器上需要安装ansible。获取到脚本后,先解压
[root@172-20-17-60 ~]# tar xvf ssh_9.4.tar.gz [root@172-20-17-60 ~]# cd ssh_9.4
脚本主要文件如下
-
hosts: ansible主机清单文件,填写待升级ssh版本的服务器ip及用户名密码
-
rpms:存放待升级的openssh相关的rpm包。可以将前面编译好的openssh包放入该路径下
-
ssh_update.sh:ssh升级脚本,将会推送到各个服务器
-
ssh_update.yaml:升级时ansible使用的playbook
-
update_ssh.sh:主脚本,通过该脚本来执行ansible的playbook
3.2 自定待升级服务器信息
node1为主机组,主机组下填写服务器ip,服务器用户名密码相同的,可以填在一起
-
ansible_user:填写用户名
-
ansible_ssh_pass:填写登录密码
如果用其它用户名或密码不同的服务器,可以填写到主机组node2下,并可新增其它主机组
3.3 执行脚本,开始升级openssh版本
[root@172-20-17-60 ssh_9.4]# bash update_ssh.sh
检查ssh版本是否已升级完成
服务上检查openssh是否成功升级到9.4版本
检查ssh是否能正常登录到服务器