因等保安全需要,需要在centos 7.8系统上, 手动编译安装和升级openssl 和 OpenSSH,记录一下备用。
需要将OpenSSH升级到9.9p2,但是当前 openssl的版本为1.0,而OpenSSH_9.9p2需要openssl1.1或openssl3.0, 因此需要先升级openssl。
由于openssl11的官方源及国内镜像经常失效或下载失败,这里才有源码编译安装。
源码安装 openssl
1.下载源码(1.1.1k 版本):
bash
复制代码
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz
tar -zxf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
2.编译安装(指定路径,避免覆盖系统默认库):
bash
复制代码
./config --prefix=/usr/local/openssl11 --openssldir=/usr/local/openssl11 shared zlib
make -j 4 && make install
确保已经安装gcc等基础工具和依赖
// 安装编译工具和依赖
sudo yum install -y gcc make zlib-devel openssl-devel
3.确认头文件和库文件路径:
- 头文件路径:
/usr/local/openssl11/include/openssl/
- 库文件路径:
/usr/local/openssl11/lib/
验证安装
无论哪种方案,安装/编译完成后,确认头文件存在:
bash
复制代码
# 通过源码编译:
ls /usr/local/openssl11/include/openssl/ssl.h
若输出文件路径,则说明头文件存在,可继续编译 OpenSSH。
注意,通过源码编译安装的 OpenSSL 1.1.1k,默认不会生成 openssl11 这个命令。
可通过绝对路径直接调用源码编译的 OpenSSL,或配置环境变量后直接使用 openssl 命令。
bash
复制代码
# 使用绝对路径
/usr/local/openssl11/bin/openssl version
# 正常输出应显示 OpenSSL 1.1.1k FIPS 25 Mar 2021,说明安装的新版本可用。
# 配置环境变量(永久生效,推荐)
vim /etc/profile
# 在文件末尾添加以下内容,指定OpenSSL的bin目录
export PATH=/usr/local/openssl11/bin:$PATH
# 保存退出后,让配置立即生效
source /etc/profile
# 验证
openssl version
# 输出示例:OpenSSL 1.1.1k FIPS 25 Mar 2021
注意,若安装后,输出版本时,提示不找到 OpenSSL 1.1.1 的动态共享库 libssl.so.1.1 和 libcrypto.so.1.1。是因为系统默认的动态链接库搜索路径里没有包含该目录下的 lib 文件夹,导致执行 openssl 时加载库失败。
可以将 /usr/local/openssl11/lib 路径添加到系统动态链接库的搜索列表中,让系统能识别到编译生成的共享库。
bash
复制代码
# 创建配置文件,存放 OpenSSL 库路径
echo "/usr/local/openssl11/lib" > /etc/ld.so.conf.d/openssl11.conf
# 更新动态链接库缓存
ldconfig -v
源码安装OpenSSH
假设已经升级openssl 到1.1
升级 OpenSSH 到 9.9p2 需通过源码编译,关键是确保编译时正确关联已安装的 OpenSSL 1.1.1k(路径为 /usr/local/openssl11)。
前置准备
1.备份现有配置和二进制文件(防止升级失败无法回滚):
bash
复制代码
# 备份 ssh 配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 备份现有 ssh 二进制文件(如 ssh、sshd 等)
cp /usr/bin/ssh /usr/bin/ssh.old
cp /usr/sbin/sshd /usr/sbin/sshd.old
2.安装编译依赖(OpenSSH 编译需要的系统库):
bash
复制代码
yum install -y gcc make zlib-devel pam-devel libselinux-devel openssh-clients
如果报错提示当前系统的 IUS 仓库配置失效(镜像地址 404),可以禁用。
bash
复制代码
yum install -y gcc make zlib-devel pam-devel libselinux-devel openssh-clients --disablerepo=ius
该命令会忽略 IUS 仓库,优先使用 CentOS 7 官方的 base、updates 等基础仓库,这些仓库的依赖包稳定且可正常访问。
步骤:编译安装 OpenSSH 9.9p2
- 解压源码包并进入目录:
bash
复制代码
tar -zxf openssh-9.9p2.tar.gz
cd openssh-9.9p2
- 配置编译参数(核心:指定 OpenSSL 1.1.1k 的路径):
bash
复制代码
./configure \
--prefix=/usr \ # 安装到系统默认路径(覆盖旧版本)
--sysconfdir=/etc/ssh \ # 配置文件存放路径
--with-ssl-dir=/usr/local/openssl11 \ # 关联已安装的 OpenSSL 1.1.1k 库目录
--with-includes=/usr/local/openssl11/include \ # 关联 OpenSSL 头文件目录
--with-pam \ # 启用 PAM 认证(用于系统用户登录)
--with-zlib \ # 启用 zlib 压缩
--with-selinux \ # 支持 SELinux(CentOS 系统建议开启)
--without-hardening # 避免编译时因系统环境导致的报错
# 无注释可执行版本
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl11 \
--with-includes=/usr/local/openssl11/include \
--with-pam \
--with-zlib \
--with-selinux \
--without-hardening
- 配置过程中若提示“
configure: error: ...”,通常是依赖缺失,根据提示安装对应包(如 libselinux-devel 等)。
- 编译并安装:
bash
复制代码
# 编译(-j 4 表示用 4 核加速,根据 CPU 核心数调整)
make -j 4
# 安装(会覆盖系统默认的 ssh、sshd 等文件)
make install
后续配置(确保服务正常启动)
- 恢复/调整配置文件:
- 若之前备份了
sshd_config,可对比新生成的 /etc/ssh/sshd_config,将自定义配置(如端口、登录权限等)迁移过去:
bash
复制代码
# 查看新配置文件,保留默认安全设置,添加旧配置中的自定义项
vim /etc/ssh/sshd_config
bash
复制代码
PermitRootLogin yes # 允许 root 登录(根据安全需求调整)
PasswordAuthentication yes # 允许密码登录(默认可能禁用)
配置完成,重启服务即可
bash
复制代码
sudo systemctl restart sshd
- 配置 systemd 服务(确保可通过 systemctl 管理):
OpenSSH 源码编译默认不生成 systemd 服务文件,需手动复制:
bash
复制代码
# 复制服务文件到 systemd 目录
cp contrib/redhat/sshd.init /etc/init.d/sshd
cp contrib/redhat/sshd.service /usr/lib/systemd/system/
# 重新加载 systemd 配置
systemctl daemon-reload
验证升级结果
检查 OpenSSH 版本及关联的 OpenSSL 版本:
bash
复制代码
ssh -V
# 预期输出:OpenSSH_9.9p2, OpenSSL 1.1.1k FIPS 25 Mar 2021