在CentOS系统中,默认通过yum或dnf包管理器安装的OpenSSH版本通常是经过官方测试和维护的稳定版或较新版,在某些特定场景下,例如为了满足旧软件的兼容性要求、遵循特定的安全合规标准,或在测试环境中复现特定问题,我们可能需要安装一个精确的旧版本,例如OpenSSH 7.6,由于官方软件源通常不会保留如此古老的版本,直接通过yum install openssh-7.6是无法实现的,最可靠、最可控的方法是从源代码编译安装,本文将详细介绍在CentOS上下载、编译并安装OpenSSH 7.6的完整流程。

准备工作:安装依赖与备份
在开始编译之前,确保系统已安装必要的开发工具和依赖库,为了防止操作失误导致远程连接中断,备份现有的SSH配置文件是至关重要的第一步。
备份SSH配置文件
这是一个绝对不能跳过的步骤,如果新安装的SSH服务出现问题,我们可以通过备份快速恢复。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
安装编译环境及依赖包
OpenSSH的编译需要一些基础的开发工具和库文件,我们可以通过yum一次性安装它们。
sudo yum groupinstall -y "Development Tools" sudo yum install -y zlib-devel openssl-devel pam-devel
- Development Tools: 这是一个软件包组,包含了GCC编译器、Make等构建软件所需的基础工具。
- zlib-devel: 提供压缩功能的支持,OpenSSH在数据传输时会用到。
- openssl-devel: 提供SSL/TLS加密支持,这是SSH安全连接的核心。
- pam-devel: 提供可插拔认证模块(PAM)支持,用于集成系统的用户认证机制。
下载并解压OpenSSH 7.6源码
我们需要从OpenSSH的官方网站下载7.6版本的源代码压缩包。
下载源码
OpenSSH的所有历史版本都可以在其官方发布页面找到,我们使用wget命令直接下载7.6p1版本(p1代表第一个补丁版本)。
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.6p1.tar.gz
解压源码
下载完成后,使用tar命令解压压缩包,并进入解压后的目录。

tar -xzf openssh-7.6p1.tar.gz cd openssh-7.6p1
编译与安装OpenSSH
进入源码目录后,我们将通过configure、make和make install这三步曲来完成编译和安装。
配置编译选项
configure脚本会检查系统环境,并生成用于编译的Makefile,为了确保安装后的OpenSSH能正常工作并与系统集成,我们需要指定一些关键参数。
./configure --prefix=/usr
--sysconfdir=/etc/ssh
--with-pam
--with-ssl-dir=/usr/local/ssl --prefix=/usr: 指定安装路径为/usr,这会将可执行文件(如ssh,sshd)安装到/usr/bin和/usr/sbin,覆盖系统原有的版本。--sysconfdir=/etc/ssh: 指定配置文件的存放目录,保持与系统默认一致。--with-pam: 启用PAM认证支持,这对于CentOS系统至关重要。--with-ssl-dir=/usr/local/ssl: 如果系统中的OpenSSL是自定义安装在非标准路径,需要用此参数指定,对于使用系统默认OpenSSL的情况,此参数通常可以省略。
编译
配置成功后,执行make命令开始编译过程,这会消耗一些时间,具体取决于服务器的性能。
make
安装
编译无误后,使用sudo权限执行make install,将编译好的文件安装到系统中指定的位置。
sudo make install
配置服务并验证
安装完成后,新的sshd可执行文件已经就位,但服务本身还需要重新配置和启动,以确保systemd能够正确管理它。
创建systemd服务文件
CentOS 7及以后版本使用systemd管理服务,我们需要为新的SSH守护进程创建一个服务单元文件。

sudo systemctl disable sshd sudo cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd.service.old
创建一个新的服务文件 /etc/systemd/system/sshd.service如下:
[Unit] Description=OpenSSH server daemon (compiled from source) Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
重新加载并启动服务
sudo systemctl daemon-reload sudo systemctl enable sshd sudo systemctl restart sshd
验证安装
也是最关键的一步,验证新版本的OpenSSH是否已经成功运行。
sshd -V
如果输出显示 OpenSSH_7.6p1,那么恭喜你,安装已经成功。请务必保持当前的SSH会话不要关闭,另外开一个新窗口测试连接,确保万无一失。
方法对比与注意事项
了解不同方法的利弊有助于做出更明智的选择。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 源码编译 | 版本精确可控,灵活性高,不依赖第三方仓库 | 操作复杂,需要手动解决依赖,后续升级维护困难 | 对版本有严格要求,或需要定制功能的环境 |
| 寻找旧版RPM | 安装简单,可通过包管理器管理 | 难以找到可信来源,依赖地狱风险高,安全性无法保证 | 紧急情况,且能找到完全匹配的、可信的RPM包 |
重要提醒:安装旧版本的软件(尤其是像SSH这样的核心安全组件)会带来已知的安全漏洞,OpenSSH 7.6p1发布于2017年,存在多个已被后续版本修复的高危漏洞,此操作应仅在完全了解风险并采取相应网络隔离等缓解措施的隔离环境中进行。
相关问答FAQs
问题1:安装后无法远程连接了怎么办?
解答:不要慌张,也立即关闭当前已连接的会话,检查系统日志以定位问题:
- 查看SSH服务状态:
sudo systemctl status sshd - 查看详细日志:
sudo journalctl -u sshd -f
常见原因包括:SELinux阻止了新版本的sshd执行(ausearch -m avc -ts recent可查看),防火墙规则未放行,或/etc/ssh/sshd_config中有不兼容的配置项,如果无法快速解决,可以使用备份的配置文件恢复,并通过yum reinstall openssh-server回到系统默认版本。
问题2:如何卸载通过源码编译安装的OpenSSH?
解答:卸载源码编译的软件比用包管理器要复杂,首选方法是回到源码目录执行sudo make uninstall(如果Makefile支持),但更稳妥的方式是手动恢复:
- 先停止服务:
sudo systemctl stop sshd。 - 恢复系统原有版本:
sudo yum reinstall openssh-server openssh-clients,这会用YUM仓库里的版本覆盖你编译的文件。 - 恢复配置文件:
sudo cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config。 - 重新启动服务并验证:
sudo systemctl restart sshd和sshd -V。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复