SSH Banner是唯一确保用户认证前强制显示的纯文本提示,需配置/etc/ssh/sshd_config中的Banner指令并设644权限;/etc/motd仅登录后显示且受PAM和update-motd.d影响;SFTP Banner需单独配置且客户端兼容性有限。

SSH登录前显示Banner(认证前强制提示)
这是唯一能确保用户在输入密码/密钥前就看到的欢迎语,审计合规、客户端无法跳过。
- 创建纯文本 Banner 文件:
sudo tee /etc/ssh/banner,内容不要含 HTML 或变量,例如:
================================================== AUTHORIZED ACCESS ONLY This system is for authorized personnel only. All activity is logged and subject to audit. ==================================================
- 编辑
/etc/ssh/sshd_config,取消注释或添加:Banner /etc/ssh/banner - 确认权限和编码:
sudo chmod 644 /etc/ssh/banner;用file -i /etc/ssh/banner检查应为charset=utf-8且无CRLF - 重启服务:
sudo systemctl restart sshd - 验证方式(不触发登录):
ssh -o ConnectTimeout=5 -o BatchMode=yes user@host 2>/dev/null | head -5,应立即输出 Banner 内容
注意:/etc/issue.net 是 Banner 的 fallback,但一旦 Banner 配置生效,它就完全不被读取。
/etc/motd 只对部分 SSH 登录生效(登录后静态消息)
/etc/motd 默认在 CentOS 7+ 的 SSH 登录中不显示,因为 OpenSSH 默认关闭了该功能。
- 先查当前状态:
sshd -T | grep printmotd,输出printmotd no表示禁用 - 如需启用,修改
/etc/ssh/sshd_config加入:PrintMotd yes,再sudo systemctl restart sshd -
/etc/motd是纯静态文本,不支持$(date)等命令替换;换行必须用\n(LF),不能是 Windows 风格\r\n - 权限应为
root:root且644,否则可能被忽略
即使启用了 PrintMotd yes,如果系统启用了 PAM 的 pam_motd.so(如 RHEL/CentOS 8+),实际输出仍可能被 /run/motd.dynamic 覆盖——此时 /etc/motd 反而失效。
用 /etc/update-motd.d/ 实现动态欢迎语(推荐用于 CentOS 7+)
CentOS 7 默认不带该目录,但可手动启用,它是比 /etc/motd 更灵活、更主流的方式。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 创建目录:
sudo mkdir -p /etc/update-motd.d/ - 写脚本,例如
/etc/update-motd.d/10-system-info:
#!/bin/bash echo "System: $(cat /etc/redhat-release 2>/dev/null || echo 'CentOS')" echo "Uptime: $(uptime -p 2>/dev/null)" echo "Users: $(who | wc -l) active"
- 赋予执行权限:
sudo chmod +x /etc/update-motd.d/10-system-info - 确保 PAM 加载了
pam_motd.so:检查/etc/pam.d/sshd是否有类似这行:session optional pam_motd.so;没有就加一行 - 脚本名前缀数字决定执行顺序,
00-最先,99-最后;重复或缺失前缀会导致跳过
脚本输出会被拼接进最终 motd,但不会影响 Banner —— 两者互不干扰,可共存。
SFTP 子系统单独配置欢迎语
SFTP 客户端(如 FileZilla、sftp 命令)默认不显示 Banner 或 motd,除非显式配置子系统级 Banner。
- 在
/etc/ssh/sshd_config中设置:Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -e不影响 Banner;真正起效的是: - 添加或修改:
Match Group sftpusers(可选)+Banner /etc/ssh/sftp_banner - 或直接全局设置:
Banner /etc/ssh/sftp_banner—— 注意:这个路径可以和 SSH 主 Banner 不同,但文件内容必须是纯文本 - 创建
/etc/ssh/sftp_banner并设权限:sudo chmod 644 /etc/ssh/sftp_banner - 重启 sshd 后,用
sftp user@host连接时会立即看到该 Banner
关键点:SFTP 的 Banner 和普通 SSH Banner 共享同一机制,但很多客户端(尤其是图形工具)会静默吞掉 Banner 输出;命令行 sftp 通常能正常显示。
真正容易被忽略的是:Banner 和 motd 本质是两层机制,一个在 TCP 层协议强制发送,一个在 shell 启动后拼接输出。混用时别指望 /etc/motd 能覆盖 Banner,也别在 Banner 文件里写命令替换——它就是纯文本,多一个 $ 都会原样发给客户端。

















