我想要一个动态的 mod,但我不知道该怎么做。
我尝试了我发现的内容,将/etc/update-motd.d/00-header
、10-sysinfo
、90-footer
和符号链接添加到/etc/motd
/var/run/motd.dynamic
、/run/motd.dynamic
、/run/motd
或/var/run/motd
。
我有这些行/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
我也对 systemd 感到困惑。
有没有办法做到这一点?有人可以提供一个简单的财富例子吗?
答案1
这些年来,这种情况已经发生了变化:
首先是/etc/motd
(静态)。
update-motd
然后 Ubuntu根据 cron 调用的脚本提出了自己的软件包。
最后,PAM 复制了 Ubuntu 的 /etc/update-motd.d/ 想法,因此 Debian 和其他操作系统也有这种行为。
这里有一个解释
https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/
所以这就是目前的情况:PAM 将只读取/var/run/motd.dynamic
它/etc/motd
是否存在(从帖子粘贴)
/etc/motd
– 经典的静态文件。在 Ubuntu 16.04 LTS 中不再存在,甚至不再作为 /var/run/motd 的符号链接。如果它被创建,那么它的内容也会被打印。/var/run/motd
– 这是 Ubuntu 的第一个实现所使用的。它不再被使用。它只是被 PAM 忽略。/var/run/motd.dynamic
– 这是当前登录时显示的内容。它在每次启动时由 /etc/init.d/motd 更新。 PAM 还可以通过运行 /etc/update-motd.d/ 中的脚本(如果存在)来更新它。/etc/motd.tail
– 用于填充 /etc/update-motd.d 的 Ubuntu 软件包。其中之一会捕获该文件的内容,因此可以轻松添加静态内容。该脚本不再存在于包中,因此该文件没有达到预期的效果。
帖子中的例子
mkdir /etc/update-motd.d
rm -f /etc/motd # in Debian still exists
cat > /etc/update-motd.d/10logo <<EOF
#!/bin/sh
echo
cat /etc/issue
EOF
cat > /etc/update-motd.d/20updates <<'EOF'
#!/bin/sh
echo
echo "uptime is $( uptime )"
echo "date is $( date )"
EOF
chmod a+x /etc/update-motd.d/*
答案2
我可以在 Debian Jessie 8.2 主机上使用 Fortune 示例测试简单的动态 motd,如下所示,发现该问题与错误行为有关。
mkdir /etc/update-motd.d
cd /etc/update-motd.d
创建如下两个测试文件并使它们可执行
root@debian:/# cd /etc/update-motd.d/
root@debian:/etc/update-motd.d# ls -l
total 8
-rwxr-xr-x 1 root root 58 Dec 1 23:21 00-header
-rwxr-xr-x 1 root root 41 Dec 1 22:52 90-fortune
root@debian:/etc/update-motd.d# cat 00-header
#!/bin/bash
echo
echo 'Welcome !! This is a header'
echo
root@debian:/etc/update-motd.d# cat 90-fortune
#!/bin/bash
echo
/usr/games/fortune
echo
然而此时,motd却没有任何变化。因此,我跟踪了 sshd 进程。从该跟踪(下面显示的有趣部分)中,您可以看到新创建的 motd.new 文件被重命名为 /var/run/motd。然而它后来尝试从 /run/motd.dynamic 读取 - 它从未创建
20318 rename("/var/run/motd.new", "/var/run/motd") = 0
20318 open("/run/motd.dynamic", O_RDONLY) = -1 ENOENT (No such file or directory)
20318 open("/etc/motd", O_RDONLY) = 8
该问题似乎与 pam_motd 模块不一致有关。查看错误报告https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743286;msg=2
只需将 motd 文件位置从 更改/run/motd.dynamic
为/run/motd
in /etc/pam.d/sshd
- 使其对我有用
root@debian:/etc/pam.d# grep pam_motd sshd
#session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so motd=/run/motd
session optional pam_motd.so noupdate
这是 ssh 登录期间看到的 MOTD 示例...
Welcome !! This is a header
* Culus fears perl - the language with optional errors
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Tue Dec 1 23:49:57 2015 from x.x.x.x
答案3
您也可以尝试使用这些文件来执行脚本。
有何/etc/profile
用途?
这些文件用于设置用户 shell 的环境项目。 umask 等项目以及 PS1 或 PATH 等变量。
有何~/.bashrc
用途?
该文件用于设置 bash shell 用户使用的命令别名和函数。
这些文件什么时候使用?
区别很简单,/etc/profile
仅针对交互式 shell 执行,而~/.bashrc
对交互式 shell 和非交互式 shell 均执行。事实上在Ubuntu中直接/etc/profile
调用~/.bashrc
。
(来源:https://bencane.com/2013/09/16/understanding-a-little-more-about-etcprofile-and-etcbashrc/)