Nb
Study
.com
🔍 请输入搜索关键字

centos 7.8 手动编译安装和升级openssl 和 OpenSSH

nbstudy 发表于 2025-11-10 10:59:57

因等保安全需要,需要在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

  1. 解压源码包并进入目录
bash 复制代码
tar -zxf openssh-9.9p2.tar.gz
cd openssh-9.9p2
  1. 配置编译参数(核心:指定 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 等)。
  1. 编译并安装
bash 复制代码
# 编译(-j 4 表示用 4 核加速,根据 CPU 核心数调整)
make -j 4

# 安装(会覆盖系统默认的 ssh、sshd 等文件)
make install

后续配置(确保服务正常启动)

  1. 恢复/调整配置文件
  • 若之前备份了 sshd_config,可对比新生成的 /etc/ssh/sshd_config,将自定义配置(如端口、登录权限等)迁移过去:
bash 复制代码
# 查看新配置文件,保留默认安全设置,添加旧配置中的自定义项
vim /etc/ssh/sshd_config
  • 关键配置建议(按需添加):
bash 复制代码
PermitRootLogin yes  # 允许 root 登录(根据安全需求调整)
PasswordAuthentication yes  # 允许密码登录(默认可能禁用)

配置完成,重启服务即可

bash 复制代码
sudo systemctl restart sshd
  1. 配置 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