CentOS 7 升级 OpenSSH 9.6 (官方简单步骤)


场景

手头有很多业务跑在 CentOS 7.x 环境,系统太老且OpenSSH 使用官方rpm包最高只能升级到7.4。要修复OpenSSH 最近的高危漏洞,只能使用OpenSSH 源码包手工编译。需要注意的点:

  • OpenSSH 提供多种操作系统分发版的打包,CentOS 7.x 可以打出rpm包,不建议使用 make install 方式安装
  • OpenSSH 需要 openssl >= 1.1.1,CentOS 官方没有这个版本,因此OpenSSH 在 CentOS 7 默认使用 --without-openssl 编译。这完全不影响ssh和sshd日常使用,后续再补全openssl-1.1.1编译步骤

准备环境

1. 编译环境

在 CentOS 7 中安装各种库、头文件、编译器和打包工具,yum 源可以配置aliyun的centos-vault

yum groupinstall -y "Development Tools"
yum install -y zlib-devel pam-devel krb5-devel
yum install -y rpmdevtools imake libXt-devel gtk2-devel

# 创建 编译和打包 的目录结构
rpmdev-setuptree
# 完成后创建以下目录
# /root/rpmbuild/SOURCES
# /root/rpmbuild/SPECS
# /root/rpmbuild/BUILD
# /root/rpmbuild/RPMS
# /root/rpmbuild/SRPMS

完成后/root/rpmbuild目录结构如下

rpmbuild目录结构

2. 下载源码

默认编译需要用到 openssh 和 x11-ssh-askpass 两套源码,源码包保存到/root/rpmbuild/SOURCES/目录下,无需解压:

cd /root/rpmbuild/SOURCES/

# 使用aliyun镜像下载openssh
curl -LO https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz

# x11-ssh-askpass-1.2.4.1
wget http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-1.2.4.1.tar.gz

至此编译环境已准备好

编译OpenSSH

编译过程:

  1. 从 openssh 源码包中解压出 RedHat 用的SPEC文件,CentOS 同样适用,放在/root/rpmbuild/SPECS目录下
  2. 编译 + 打包,编译过程一般不会出错,最终得到 rpm 包
# 找到openssh包并解压spec
cd /root/rpmbuild/SOURCES/

tar -xvzf openssh-9.6p1.tar.gz \
	-C /root/rpmbuild/SPECS/ \
	--strip-components=3 \
	openssh-9.6p1/contrib/redhat/openssh.spec

# 到 /root/rpmbuild/SPECS/ 目录下
# 使用 openssh.spec 编译和打包
rpmbuild -ba openssh.spec

rpmbuild不报错执行完,编译和打包结果会放在/root/rpmbuild/RPMS/x86_64/目录下
编译和打包结果

安装

安装比较简单,rpm或yum均可

cd /root/rpmbuild/RPMS/x86_64

rpm -Uvh openssh-9.6p1-1.el7.x86_64.rpm \
	openssh-server-9.6p1-1.el7.x86_64.rpm \
	openssh-clients-9.6p1-1.el7.x86_64.rpm 

# 或执行

yum install -y openssh-9.6p1-1.el7.x86_64.rpm \
	openssh-server-9.6p1-1.el7.x86_64.rpm \
	openssh-clients-9.6p1-1.el7.x86_64.rpm 

升级安装时需要注意 /etc/ssh 目录下sshd的配置

  1. 私钥文件的权限应设置为600,否则sshd会无法启动
  2. openssh7 的 rsa密钥 和 ecdsa密钥 已经不再有效了,可选删除
  3. 新的sshd_config被命名为sshd_config.rpmnew,可选备份并替换
cd /etc/ssh

chmod 600 *key

# 可选操作:删除 rsa密钥 和 ecdsa密钥
mkdir bak
mv ssh_host_ecdsa_key* bak/
mv ssh_host_rsa_key* bak/

# 可选操作:替换sshd_config
# 注意检查旧版本sshd_config的配置,如是否允许root登录
mv sshd_config sshd_config.openssh74
mv sshd_config.rpmnew sshd_config

各项配置检查妥当后,重启sshd

systemctl restart sshd.service

这里有几点经验

  1. 重启sshd服务后先不要关闭终端软件session,因为现有的连接是旧版sshd提供的。先开新的session测试ssh连接,能成功登录并成为root用户后再考虑关闭老的session,避免各种问题导致无法连接服务器
  2. 如果要升级生产环境,务必先在测试环境多测试,然后分期分批升级生产环境,否则会收获很惨痛的教训

总结

本次编译的rpm包可以在这里下载

另外需要关注:openssl 版本低于1.1.1导致 openssh 编译时自动加上 --without-openssl,使用sshd -V也显示without OpenSSL,下篇博客解决这个问题
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值