CentOS Linux 7 的生命周期(EOL)将于 2024 年 6 月 30 日终止,目前仍然有大量服务器使用 CentOS7.
官方的 YUM 源中 OpenSSH 停止在 7.4 版本,每年低版本 OpenSSH 都会爆出新漏洞,需要升级最新版 OpenSSH 往往需要下载源码编译安装,但是很多内网服务器缺少编译环境,Github 上 boypt 大佬提供了最新版 OpenSSH 源码构建 rpm 包的脚本,并嵌入了新版 OpenSSL, 使升级最新版 OpenSSH 变得简单了.
生成 rpm 包#
准备打包环境#
最好在 CentOS7 的环境中打包,可以使用 CentOS7 的虚拟机,也可以部署 CentOS7 的 WSL, 进入 CentOS7, 执行下面的命令安装开发工具和依赖,本次打包环境为 CentOS7.9
yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl perl-IPC-Cmd
下载打包脚本#
可以使用 git clone 拉取脚本,也可以从 github 下载 zip 解压,这里使用 git
git clone https://github.com/boypt/openssh-rpms.git
执行 pullsrc.sh 下载源码#
执行脚本目录下 pullsrc.sh 会自动下载 OpenSSH 和 OpenSSL 以及 x11-ssh-askpass 的最新版源码文件
下载完成后会保存到 openssh-rpms/downloads 目录下,openssh-rpms 是上一步下载的脚本目录
[root@localhost ~]# cd openssh-rpms/
[root@localhost openssh-rpms]# ./pullsrc.sh
执行 compile.sh 编译源码构建 rpm 包#
执行脚本目录下 compile.sh 解压源码包进行编译,最后在 openssh-rpms/el7/RPMS/x86_64 / 目录下生成最新版 OpenSSH 的 rpm 包
编译过程与系统性能相关,使用 WSL 的 CentOS7 打包在 3 分钟左右,虚拟机 CentOS7 根据分配的 CPU 和内存大小时间会有差异
[root@localhost openssh-rpms]# ./pullsrc.sh
rpm 归档#
rpm 构建完成后可以使用 tar 归档,将 4 个 rpm 包压缩为.tar.gz 文件,拷贝到需要升级 ssh 的 CentOS 的服务器上解压安装
[root@localhost openssh-rpms]# cd el7/RPMS/x86_64/
[root@localhost x86_64]# tar czvf openssh-9.8_el7.tar.gz openssh*.rpm
服务器安装新版 OpenSSH#
注意:若使用 ssh 登录升级服务器,不要断开 ssh 连接,升级结束后新建 ssh 窗口可以正常登录后才算升级完成,测试升级服务器为 CentOS7.9
拷贝安装包,卸载旧版 OpenSSH#
首先把打包好的 openssh-9.8_el7.tar.gz 使用 scp 或者 sftp 拷贝到目标服务器,这里拷贝到了 opt 目录下,然后卸载服务器的旧版 openssh
[root@server ~]# yum remove openssh* -y
安装新版 OpenSSH#
进入 opt 目录,解压 openssh-9.8_el7.tar.gz, 然后使用 rpm 命令安装即可
[root@server ~]# cd /opt
[root@server opt]# tar xf openssh-9.8_el7.tar.gz
[root@server opt]# rpm -ivh openssh*.rpm
问题处理#
安装完重启 sshd 会报错,查看错误信息发现是 /etc/ssh/ssh_host_ed25519_key
文件权限为 0640 报错,修改 ssh_host_*_key 文件权限后重启 sshd 即可
[root@server opt]# chmod 0600 /etc/ssh/ssh_host_*_key
[root@server opt]# systemctl restart sshd
sshd 服务正常运行后新建 ssh 连接窗口,测试是否可以正常登录,一切正常则升级完成