Debian

如何在 Debian Jessie 8.2 中為 ssh 設置每日動態消息(motd)?

  • January 27, 2021

我想要一個動態的motd,但我不知道該怎麼做。

我嘗試了我發現的內容,將/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感到困惑。

有沒有辦法做到這一點?有人可以提供一個簡單的例子嗎?

我可以在我的 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 程序進行了 strace。從該跟踪(有趣的部分如下所示),您可以看到新創建的 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

多年來,這種情況發生了變化:

首先是/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/*

引用自:https://unix.stackexchange.com/questions/246436