必须使用 Banner 机制在 SSH 登录前强制显示法律警告;Banner 文件须为纯文本、UTF-8 无 BOM、LF 换行,推荐路径 /etc/ssh/banner,可用 sudo tee 创建。

要在 SSH 登录前强制显示法律警告或安全提示,必须使用 Banner 机制——它在 TCP 连接建立后、认证开始前发送,所有连接者(包括未登录用户)都会看到,不可跳过,也不依赖登录成功。
创建合规的 Banner 文件
文件需为纯文本、UTF-8 无 BOM、行尾为 LF(Unix 换行),不能含 Windows 换行符(CRLF)或反斜杠转义符(如 \n、\t)。推荐路径:/etc/ssh/banner。
- 用命令快速创建(内容示例):
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 - 禁止使用符号链接;上级目录(如
/etc、/etc/ssh)权限不能过宽(如不可为 777)
启用 Banner 并关闭干扰项
编辑 /etc/ssh/sshd_config,确保以下配置准确生效:
- 启用 Banner:取消注释或添加
Banner /etc/ssh/banner(路径必须完全匹配,且全文件中仅此一行) - 禁用登录后干扰项:
PrintLastLog no(防止泄露上次登录时间) - 清空并锁定系统级横幅:
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 truncate -s 0 /etc/motd
重载服务并验证是否生效
修改配置后不重载 = 无效。务必执行:
-
sudo systemctl reload sshd(推荐,不中断当前会话) - 从另一台机器测试:
nc -v your-server-ip 22—— 连接建立后应立刻看到你的 Banner 文字(首行为 SSH 协议标识,第二行起即你写的内容) - 避免用
ssh localhost测试,本地回环可能绕过网络栈,结果不准
额外注意事项
Banner 不支持变量(如 $(hostname))、不加密传输,因此:
- 不要放入内网 IP、主机名、服务拓扑等敏感信息
- 如需动态内容(如时间、主机名),可用定时任务定期生成 Banner 文件
- 若需隐藏 SSH 握手时的发行版信息,加
DebianBanner no和VersionAddendum none,再 reload


















