新的 motd 脚本将不会运行

新的 motd 脚本将不会运行

我创建了一个新脚本99-wlan0-RWB,其中/etc/update-motd.d像所有其他脚本一样可以执行。它在单独运行或通过 运行时可以工作run-parts,但在登录时不运行:出了什么问题? (我在 Raspberry Pi 上也遇到同样的问题没有任何运行中的脚本update-motd.d。)( 中没有任何内容/var/log/syslog。)

$ ssh root@mini31
Linux mini31 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
External IP: xx.yyy.zzz.www
 ______________________________________
/ 1st graffitiist: QUESTION AUTHORITY! \
|                                      |
\ 2nd graffitiist: Why?                /
 --------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
df: 43G (81%)
    O2: 1.65 GB / 3.3 GB
Lebara: 6.49 MB / 66 MB
up: 10 days, la: 1:0.11, 5:0.14, 15:0.10
mssql tempdb.mdf is 515M
CPU temp.: +52.0
No mail.
mini31 # cd /etc/update-motd.d/
mini31 # ./98-data
df: 43G (81%)
    O2: 1.65 GB / 3.3 GB
Lebara: 6.49 MB / 66 MB
up: 10 days, la: 1:0.18, 5:0.15, 15:0.10
mssql tempdb.mdf is 515M
CPU temp.: +50.0°C
mini31 # ./99-wlan0-RWB
wlan0 is up
mini31 #

答案1

我也遇到了同样的问题,我花了三个晚上才弄清楚发生了什么。但你的文件名中有一个大写字母。将您的文件重命名为全部小写字母,它应该开始工作。令人沮丧的是,有关命名约定的文档中没有指出这一点(https://manpages.ubuntu.com/manpages/jammy/en/man5/update-motd.5.htm

答案2

对于较新的系统,MOTD 通过pam_motdPAM 身份验证/授权子系统进行控制(请参阅 参考资料man pam_motd)。当会话打开时,它通过sshd和工具触发。login

相关条目来自/etc/pam.d/sshd

# Print the message of the day upon successful login.
# 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
session    optional     pam_motd.so  noupdate

第一个条目中引用的文件/run/motd.dynamic是通过处理目录中的可执行脚本创建的/etc/update-motd.d/,这意味着每次用户登录时都会更新该文件。

第二个条目仅输出固定文件的内容/etc/motd

现在至于为什么你的脚本没有运行:我有两个建议:

  1. 与之关联的目录和/或文件的权限/etc/update-motd.d太宽松。 (我不知道这是否是一个问题,但由于它们是由 root 运行的,所以应该是一个问题。)
  2. PAM 定义文件中的条目丢失或被注释掉

答案3

/etc/motd以下是登录时更新的方法。我已经在我的 RPi OS 破坏系统上测试了它,它对我有用。还有其他方法(例如使用pam_motd)也可以实现相同或相似的结果。事实证明,当我不注意时,简单的 MOTD 已经变得相当复杂。这Debian 维基motd涵盖了基于 Debian 的发行版(例如 Raspberry Pi OS)的大部分细节,并且还总结了motd其他几个常见发行版的处理方式。

在登录时生成/刷新/etc/motd文件的一种方法是在登录时运行命令来更新它。对于bash登录脚本,可以从该文件运行~/.profile

pi下面是一个通过 SSH 登录在我的系统上运行的简单示例:添加到user 的末尾的一行命令序列~/.profile。由于修改/etc/motd需要权限,因此可以通过以下方式root最方便地写入该文件:teesudo

printf "Hello from .profile for  %s.\n" $USER | sudo tee -a /etc/motd >/dev/null

-a附加tee到哪个选项/etc/motd可能不适合许多用例;>通过简单地省略参数来调用覆盖(相当于) -a。此外,重定向可防止/dev/nullMOTD 被重复在终端的登录显示中。

笔记:

  1. 调用sudo在这里起作用,因为用户在文件中pi具有设置- 当前NOPASSWDsudoers默认RPi OS 破坏者的设置。

  2. SSH 登录的 MOTD 显示据说被控制/etc/ssh/sshd_config通过(PrintMotd)。然而,对于 Debian 发行版,此选项必须设置nosshd默认值 ( yes) 导致输出 MOTD 两次 - 一次来自sshd,再次来自pam_motd

  3. 阅读 re 中的注释~/.profile~/.bash_profile或 的存在~/.bash_login

相关内容