yzbtdiy

yzbtdiy

github
bilibili

打包CentOS7 新版OpenSSH rpm

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

image

执行 compile.sh 编译源码构建 rpm 包#

执行脚本目录下 compile.sh 解压源码包进行编译,最后在 openssh-rpms/el7/RPMS/x86_64 / 目录下生成最新版 OpenSSH 的 rpm 包

编译过程与系统性能相关,使用 WSL 的 CentOS7 打包在 3 分钟左右,虚拟机 CentOS7 根据分配的 CPU 和内存大小时间会有差异

[root@localhost openssh-rpms]# ./pullsrc.sh

image

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

image

服务器安装新版 OpenSSH#

注意:若使用 ssh 登录升级服务器,不要断开 ssh 连接,升级结束后新建 ssh 窗口可以正常登录后才算升级完成,测试升级服务器为 CentOS7.9

拷贝安装包,卸载旧版 OpenSSH#

首先把打包好的 openssh-9.8_el7.tar.gz 使用 scp 或者 sftp 拷贝到目标服务器,这里拷贝到了 opt 目录下,然后卸载服务器的旧版 openssh

[root@server ~]# yum remove openssh* -y

image

安装新版 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

image

问题处理#

安装完重启 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

image

sshd 服务正常运行后新建 ssh 连接窗口,测试是否可以正常登录,一切正常则升级完成

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。