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