Archlinux 实现动态 motd
一直很好奇阿里云的 ubuntu 的 ssh 登录时出现的信息,但/etc/motd是空的。我自己以前实现的motd只有一个figlet生成的文字,更本就不是真正的motd。
花了一些时间上 github,百度,google 和 Archlinux wiki 找资料,终于搞明白大概的实现原理。
在 Archlinux 中,在用户登录ssh的时候,sshd里面的配置了pam,pam会调用了motd。
1 | |
1 | |
但是这样只是调用了motd文件,实现不了动态,换个思路:
只要我们写一个脚本,在pam执行时,不是处理/etc/motd文件,而是遍历/etc/update_motd.d/下面的脚本,这时候就能实现动态展示了。
所以我们只要执行下面几个步骤就能实现动态motd:
- 实现遍历
/etc/update_motd.d/的脚本 - 修改
/etc/pam.d/system-login执行update-motd脚本 - 编写
/etc/update_motd.d/下的脚本
实现 update-motd
其实也很简单,就一行命令,但还是写成一个工具调用比较好
1 | |
1 | |
编辑完后给这个文件执行权限
1 | |
修改 pam 配置
1 | |
1 | |
在原来的语句上面加上执行/usr/bin/update-motd的配置,这样修改/etc/motd也一样会生效。毕竟原来的系统就支持/etc/motd,如果直接在上面改,就和以前的操作不符了。
实现 update-motd.d 脚本
1 | |
在里面实现脚本即可,我把脚本推到 github 上了,直接抄作业
https://github.com/bubao/arch-nas-motd/tree/main/update-motd.d
效果

参考
Archlinux 实现动态 motd
https://bubao.github.io/posts/daba6ec4.html