本文介绍如何在 Debian/Ubuntu 等 Linux 系统中配置动态登录欢迎信息(MOTD, Message of the Day),实现每次 SSH 登录时自动显示系统状态(如 CPU 负载、内存使用、磁盘占用、IP 地址等),并附带个性化 ASCII 艺术图案。
配置步骤
1. 禁用默认 MOTD 输出
编辑 SSH 服务配置,关闭静态 MOTD 打印:
vim /etc/ssh/sshd_config
找到并修改以下行:
PrintMotd no
💡 此设置防止 SSH 在登录时自动打印
/etc/motd的静态内容(我们将通过 profile 动态生成)。
2. 禁用 PAM 的 MOTD 模块(可选但推荐)
注释掉 PAM 登录会话中的 MOTD 模块,避免重复或冲突:
vim /etc/pam.d/login
将以下行注释:
# session optional pam_motd.so
⚠️ 注意:某些发行版(如 Ubuntu)可能还需修改
/etc/pam.d/sshd。
3. 创建动态 MOTD 脚本
创建脚本文件 /usr/local/bin/dynmotd:
vim /usr/local/bin/dynmotd
粘贴以下内容:
#!/bin/bash
# System load
LOAD1=$(cat /proc/loadavg | awk '{print $1}')
LOAD5=$(cat /proc/loadavg | awk '{print $2}')
LOAD15=$(cat /proc/loadavg | awk '{print $3}')
# Memory info
MEMORY=$(free -mh | awk '/^Mem:/ {print "used: "$3" / "$2" ( free: "$4" )"}')
MEM_USAGE=$(free -m | awk '/^Mem:/ {printf("%.1f%%", ($3/$2)*100)}')
# Disk usage for root partition
DISK=$(df -Ph / | awk '/\// {print "used: "$3" / "$2" ( free: "$4" )"}')
DISK_USAGE=$(df -h / | awk '/\// {print $5}')
# Output dynamic MOTD
echo "
===========================================================================
- Release.............: $(lsb_release -r | awk '{print $2}')
- Kernel..............: $(uname -r)
- Hostname............: $(uname -n)
- Username............: $(whoami)
- IP..................:
$(netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq | grep -v '^127.0.0.1$' | grep -v '^::1$')
- Login Users.........: Total $(users | wc -w) user(s)
===========================================================================
- CPU usage...........: $LOAD1 - $LOAD5 - $LOAD15 (1-5-15 min)
- Memory..............: $MEMORY
- Memory usage........: $MEM_USAGE
- Disk usage (/)......: $DISK_USAGE
===========================================================================
"
保存后赋予执行权限:
chmod 755 /usr/local/bin/dynmotd
✅ 改进说明:
- 使用
$()替代反引号`(更现代、可嵌套)- 过滤掉本地回环地址(
127.0.0.1,::1),只显示真实远程 IP- 增加了根分区磁盘使用率显示
4. 在用户登录时调用脚本
编辑全局 shell 配置文件:
vim /etc/profile
在文件末尾添加一行:
/usr/local/bin/dynmotd
📌 此方式确保所有交互式 shell 登录(包括 SSH)都会执行该脚本。
5. (可选)设置静态 MOTD 图案
虽然我们已禁用自动打印 /etc/motd,但某些终端仍可能读取它。可将其设为个性化 ASCII 艺术:
vim /etc/motd
清空原内容,粘贴以下“佛祖保佑”图案(或自定义):
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永无BUG 永不修改 //
🔔 注意:由于我们在
/etc/profile中已动态输出信息,此文件通常不会被显示。保留仅为兼容性或本地登录使用。
最终效果
SSH 登录后将看到类似如下动态信息:
===========================================================================
- Release.............: 9.13
- Kernel..............: 4.9.0-19-amd64
- Hostname............: VM-0-7-debian
- Username............: root
- IP..................:
203.0.113.45
- Login Users.........: Total 1 user(s)
===========================================================================
- CPU usage...........: 0.12 - 0.08 - 0.05 (1-5-15 min)
- Memory..............: used: 320M / 1.9G ( free: 1.6G )
- Memory usage........: 16.8%
- Disk usage (/)......: 28%
===========================================================================
