从源码编译安装openssh需手动验证官方签名、应用cve补丁或合规配置、启用编译器防护、创建非特权用户、生成密钥并严格配置sshd_config,最后通过sshd -t和ss命令验证运行。

从源代码编译安装 OpenSSH 并手动应用安全补丁,适用于需要精确控制版本、定制加固策略或在无包管理环境(如某些嵌入式系统、老旧发行版)中部署合规 SSH 服务的场景。核心在于:**不依赖 distro 预编译包,自行获取官方源码、验证完整性、打补丁、配置安全选项、编译安装,并完成最小化运行验证。**
获取可信源码与验证签名
必须从 openssh.com 官方站点 下载源码包及对应 GPG 签名,避免使用镜像站或第三方打包源:
- 访问 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/,下载最新稳定版(如
openssh-9.8p1.tar.gz)及同名.asc签名文件 - 导入 OpenSSH 发布密钥(长期有效):
gpg --recv-keys 0x5A7E26F4D3C2264B(密钥 ID 可查官网公告) - 验证签名:
gpg --verify openssh-9.8p1.tar.gz.asc openssh-9.8p1.tar.gz,确认输出含 "Good signature" 且密钥指纹匹配官网公布值
应用安全补丁(非官方但合规场景常用)
OpenSSH 官方通常不提供“补丁包”,所谓“手动合规补丁”一般指两类操作:
-
修复已知 CVE 的上游补丁:从 OpenBSD CVS 或 OpenSSH GitHub PR 中提取对应 commit diff(如 CVE-2023-51385 补丁),用
patch -p1 应用;需确保补丁与当前源码版本兼容,否则可能编译失败 -
启用 FIPS/等保/PCI-DSS 合规配置:不改代码,而是在
configure阶段强制启用安全策略,例如:./configure --with-ssl-engine --with-pam --without-openssl-version-check --with-md5-passwords=no --with-privsep-path=/var/lib/sshd - 注意:禁用弱算法(如 ssh-rsa、SHA-1)应在
sshd_config中配置,而非源码层修改;源码级硬编码禁用会破坏向后兼容性,不推荐
安全编译与最小化安装
编译过程需显式关闭非必要组件、指定安全路径、启用编译器防护:
- 依赖检查:确保已安装
openssl-devel(或 libressl-dev)、pcre2-devel、zlib-devel、linux-pam-devel(如需 PAM) - 配置命令示例(关键加固项加粗):
./configure \<br> --prefix=/usr \<br> --sysconfdir=/etc/ssh \<br> --with-privsep-user=sshd \<br> --with-privsep-path=/var/lib/sshd \<br> --with-pam \<br> --without-kerberos5 \<br> --without-selinux \<br> --with-ssl-engine \<br> CFLAGS="-O2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC"
- 编译并静默安装:
make -j$(nproc) && sudo make install - 创建非特权用户与目录:
sudo useradd -r -s /bin/false sshd && sudo mkdir -p /var/lib/sshd && sudo chown sshd:sshd /var/lib/sshd
启动前关键配置与验证
安装后不能直接启动,必须手工初始化配置并做基础安全检查:
- 生成主机密钥(仅首次):
sudo ssh-keygen -A(生成 /etc/ssh/ssh_host_*_key) - 编辑
/etc/ssh/sshd_config,至少设置:Protocol 2<br>PermitRootLogin no<br>PermitEmptyPasswords no<br>MaxAuthTries 3<br>ClientAliveInterval 300<br>ClientAliveCountMax 2<br>Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com<br>KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256<br>MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
- 语法检查:
sudo sshd -t(返回空即成功) - 启动并监听验证:
sudo /usr/sbin/sshd -D -e -f /etc/ssh/sshd_config 2>&1 | head -20(前台运行看日志),再另起终端执行ss -tlnp | grep :22确认绑定 IPv4/IPv6 且 UID 是 sshd










