SSH登录后欢迎语(MOTD)需区分静态与动态机制:静态须设PrintMotd yes并重启sshd;动态推荐用/etc/update-motd.d/脚本(Ubuntu/Debian)或PAM pam_motd.so(RHEL/CentOS),且需检查sshd重启、PAM配置及shell初始化文件是否清屏。
SSH 登录后显示的欢迎语(MOTD)不是改完 /etc/motd 就自动生效的——现代 Linux 发行版大多默认禁用它,或改由 PAM 动态生成。关键在于区分“登录前”和“登录后”,以及静态与动态两种机制。
这是用户输入用户名密码前看到的内容,适合放合规提示、授权声明等:
/etc/ssh/sshd_config,取消注释或添加这一行:Banner /etc/ssh/banner.txt
sudo tee /etc/ssh/banner.txt <<'EOF'
本系统仅供授权人员访问
Unauthorized access is prohibited by law
EOF
sudo systemctl restart sshd
注意:Banner 不支持变量(如 n、$(hostname)),纯文本;且对所有连接者可见,包括失败尝试。
这是用户成功认证、shell 启动前输出的内容。分两种主流方式:
编辑 /etc/motd,例如:echo "Welcome to web-prod-01" | sudo tee /etc/motd
但必须在 /etc/ssh/sshd_config 中设 PrintMotd yes,再 sudo systemctl restart sshd
Ubuntu/Debian 系默认走 /etc/update-motd.d/;RHEL/CentOS 需手动配置 PAM。
例如新建脚本:
sudo tee /etc/update-motd.d/10-header <<'EOF'
#!/bin/sh
echo "=== $(hostname -s) | $(date +%F) ==="
echo "Load: $(uptime -p | sed 's/up //')"
EOF
然后加执行权限:sudo chmod +x /etc/update-motd.d/10-header
改了文件却没看到效果?重点查这三项:
sudo systemctl restart sshd(reload 不够)grep pam_motd /etc/pam.d/sshd,应有类似 session optional pam_motd.so 的行~/.bashrc 或 /etc/profile 里有没有 clear 或 reset —— 它们会把 MOTD 冲掉MOTD 支持 ANSI 转义序列(如 e[1;32m 表示粗绿),但需确保终端支持:
printf 替代 echo 更可靠,例如:printf "e[1;36mHOST:e[0m $(hostname)n"
figlet 或 toilet 类工具直接写入 MOTD 脚本——它们依赖终端尺寸,远程 SSH 可能渲染错乱