我知道pam_motd
登录后会更新 MOTD,但有时 MOTD 几天都没有更新,我不知道原因是什么。我想将输出添加到 MOTD,并uptime
从who
脚本中正确调用它们/etc/update-motd.d/
,但如果向用户显示过时的信息,这似乎毫无意义。
来自update-motd
手册页:
Executable scripts in /etc/update-motd.d/* are executed by pam_motd(8) as
the root user at each login, and this information is concatenated in /var/run/motd.
The order of script execution is determined by the run-parts(8) --lsbsysinit option
(basically alphabetical order, with a few caveats).
据我所知,每次登录时都应该更新 MOTD。但事实并非如此。而且我找不到手动更新 MOTD 的脚本。我可以run-parts
向 中添加一行cron
,但我认为这不是解决这个问题的正确方法,因为它感觉像是一种黑客攻击或变通方法。
/etc/pam.d/login
我最后的希望是像这样设置:
# Prints the message of the day upon succesful login.
# (Replaces the `MOTD_FILE' option in login.defs)
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
#session optional pam_motd.so motd=/run/motd.dynamic noupdate
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so
我以为删除noupdate
就可以解决问题,但事实并非如此。
答案1
我最近也遇到了同样的问题。您需要编辑/etc/pam.d/sshd
以删除或注释掉那里的 noupdate。
答案2
update-motd
是运行以下简单脚本:
run-parts --lsbsysinit /etc/update-motd.d 2>/dev/null
根据运行部件手动的:
If the --lsbsysinit option is given, then the names must not end in
.dpkg-old or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong to
one or more of the following namespaces: the LANANA-assigned namespace
(^[a-z0-9]+$); the LSB hierarchical and reserved namespaces
(^_?([a-z0-9_.]+-)+[a-z0-9]+$); and the Debian cron script namespace
(^[a-zA-Z0-9_-]+$).
因此,为了验证问题是否与update-motd
文件名有关,请尝试:
run-parts --test --lsbsysinit /etc/update-motd.d
此命令打印将要运行的脚本的名称,但实际上并不运行它们。