为什么需要修改 OpenSSH 版本号?
默认情况下,OpenSSH 会在连接时向客户端暴露其版本信息(例如 SSH-2.0-OpenSSH_8.9p1)。
攻击者可利用该信息判断系统是否存在已知漏洞。通过修改或隐藏版本号,可以:
- 降低被自动化扫描工具识别的风险
- 防止针对性攻击
- 满足某些安全合规要求
修改方法(基于源码编译)
注意:此操作需重新编译 OpenSSH,适用于有 root 权限的 Linux/Unix 系统。
步骤 1:下载 OpenSSH 源码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar -xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1
步骤 2:修改版本字符串
编辑 version.h 文件(部分版本为 defines.h 或直接在 ssh.c 中):
// 原始内容可能类似:
#define SSH_VERSION "OpenSSH_9.7"
// 修改为你想要的版本号,例如:
#define SSH_VERSION "SecureSSH_1.0"
步骤 3:编译并安装
./configure --prefix=/usr --sysconfdir=/etc/ssh
make
sudo make install
警告:请确保备份原配置和二进制文件。错误的编译可能导致 SSH 服务无法启动,建议在测试环境验证后再部署到生产环境。
验证修改结果
从另一台机器使用以下命令查看返回的 banner:
ssh -v user@your-server-ip
或使用 telnet(若支持):
telnet your-server-ip 22
你应看到类似 SSH-2.0-SecureSSH_1.0 的输出。
替代方案:使用防火墙或代理隐藏版本
如果不希望重新编译,也可考虑以下方式:
- 使用反向代理(如 HAProxy)重写 SSH banner(较复杂)
- 在网络边界部署 IDS/IPS 过滤敏感信息(不推荐用于 SSH)
- 限制 SSH 访问 IP 范围,减少暴露面
但最直接有效的方式仍是修改源码。
注意事项
- 修改版本号不能替代及时打补丁!仍需保持 OpenSSH 更新。
- 某些安全审计工具会检测“非标准”SSH 实现,可能触发告警。
- 自定义版本号后,日志中的标识也会改变,请更新监控规则。