SSH Banner默认不显示内核信息,真正泄露源是/etc/issue、/etc/issue.net或SSH握手版本字符串;应配置VersionAddendum none、清空并锁定横幅文件、启用自定义Banner、管控MOTD。

关闭SSH握手阶段的版本后缀
OpenSSH在TCP连接建立初期会发送一行标识(如 SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2),括号里就是可隐藏的部分:
- 编辑 /etc/ssh/sshd_config,添加或修改这一行:
VersionAddendum none - 保存后执行 sudo systemctl reload sshd(不用restart,避免断连)
- 验证:用另一台机器运行
nc -v your-server-ip 22,观察首行是否只剩 SSH-2.0-OpenSSH_9.2p1(主版本号无法彻底隐藏,但去掉了发行版和补丁细节)
禁用或清空系统级登录横幅文件
SSH服务本身不读取 `/etc/issue`,但很多Linux发行版(如Debian、Ubuntu、RHEL/CentOS)会让getty或telnet等服务加载它,而某些SSH配置(如未设Banner)可能间接触发显示。更稳妥的做法是清理源头:
- 清空两个关键文件:
sudo truncate -s 0 /etc/issue /etc/issue.net - 设为只读,防止被覆盖:
sudo chmod 444 /etc/issue /etc/issue.net - 注意:改完需重启 getty 服务(如
sudo systemctl restart getty@tty1)或重新插拔终端才生效
正确启用自定义SSH Banner(可选但推荐)
如果你希望用户登录前看到统一提示(比如“Authorized access only”),必须显式启用Banner,并避开常见陷阱:
- 创建纯文本文件,例如:
echo "Warning: Unauthorized access prohibited." | sudo tee /etc/ssh/banner - 设置权限和所有者:
sudo chmod 644 /etc/ssh/banner && sudo chown root:root /etc/ssh/banner - 在 /etc/ssh/sshd_config 中取消注释并写入:
Banner /etc/ssh/banner - 确保该路径不是符号链接,且上级目录(如
/etc、/etc/ssh)权限不能过宽(比如不能是777) - 再次 reload sshd;测试时务必从外部机器连接,不要用
ssh localhost(它可能绕过网络栈)
别漏掉 MOTD 和动态提示干扰
有些系统(如Ubuntu 20.04+、CentOS 8+)会在用户成功登录后自动显示 `/etc/motd` 或 `/etc/update-motd.d/` 脚本输出,里面可能含内核、主机名、磁盘状态等——这不属于Banner,但容易被误认为是登录横幅:
- 检查是否启用动态MOTD:
ls /etc/update-motd.d/,如有脚本,可临时重命名测试 - 若只想保留静态提示,可清空
/etc/motd并禁止更新:sudo truncate -s 0 /etc/motd && sudo chmod 444 /etc/motd - 注意:MOTD内容在认证后才显示,不影响Banner隐藏目标,但能减少整体信息泄露面


















