必须使用 OpenSSH 的 Banner 机制修改 SSH 登录前欢迎横幅;它在认证前强制显示,不可跳过,需创建 UTF-8 无 BOM 纯文本文件(如 /etc/ssh/banner),内容简洁含法律警示,禁用敏感信息与转义字符。

要在 Linux 系统中修改 SSH 登录前的欢迎横幅(即法律警告或安全提示),必须使用 Banner 机制——它在用户输入用户名之前、认证流程启动前强制显示,不可跳过,也不依赖登录成功。这不是改 motd 或 issue,而是配置 OpenSSH 的原生 Banner 功能。
创建合规的 Banner 文件
文件内容需简洁明确,含法律警示语,不含敏感信息(如内网 IP、主机名、服务拓扑)和转义字符(如 \r、\n、\m)。推荐用 UTF-8 无 BOM 编码,纯文本格式。
- 快速创建示例文件:
sudo tee /etc/ssh/banner =================================================
WARNING: AUTHORIZED ACCESS ONLY
All activity is logged and subject to audit.
Unauthorized access is prohibited by law.
=================================================
EOF - 设置正确权限:
sudo chmod 644 /etc/ssh/banner && sudo chown root:root /etc/ssh/banner - 验证编码与换行:
file -i /etc/ssh/banner —— 应显示 charset=utf-8,且无 with CRLF line terminators
启用 Banner 并屏蔽干扰项
仅写文件不够,必须让 sshd 主动读取并禁用其他可能覆盖或混淆提示的机制。
- 编辑 /etc/ssh/sshd_config,确保以下配置存在且未注释:
Banner /etc/ssh/banner
PrintLastLog no - 清空并锁定系统级横幅,防止 getty/telnet 等服务意外泄露:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 444 /etc/issue /etc/issue.net - 停用 MOTD 动态注入(尤其 Ubuntu/Debian):
sudo systemctl disable motd-news.timer && sudo systemctl stop motd-news.timer
sudo truncate -s 0 /etc/motd
验证 Banner 是否真实生效
改完不重载 = 白改。验证必须脱离本地回环,模拟真实网络连接行为。
- 重载服务(不中断当前会话):
sudo systemctl reload sshd - 从另一台机器测试:
nc -v your-server-ip 22
应立刻看到你的 Banner 文字(第二行起),首行是 SSH 协议标识(如 SSH-2.0-OpenSSH_9.2p1) - 避免用 ssh localhost 测试——本地回环常绕过网络栈,结果不可靠
额外加固:隐藏系统指纹
若需满足等保或 ISO 27001 对“最小信息暴露”要求,还需阻断三处服务标识泄露:
- 协议层:在 sshd_config 中添加 DebianBanner no 和 VersionAddendum none,隐藏发行版后缀与补丁细节
- 终端层:已通过清空 /etc/issue 和 /etc/issue.net 处理
- 会话层:已禁用 PrintLastLog 和 MOTD,避免登录后泄露时间、主机名、更新数等线索


















