如何在 Debian Jessie 8.2 中为 ssh 设置动态每日消息 (motd)?

如何在 Debian Jessie 8.2 中为 ssh 设置动态每日消息 (motd)?

我想要一个动态的 mod,但我不知道该怎么做。

我尝试了我发现的内容,将/etc/update-motd.d/00-header10-sysinfo90-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/motdin /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/

相关内容