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


16

我希望有一个动态的模式,但是我不知道该怎么做。

我试了一下,我发现,加入/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感到困惑。

有没有办法做到这一点?有人可以举一个简单的例子吗?


pam_motd.so noupdate那里不是问题吗?
2015年

Answers:


11

我可以在下面的Debian Jessie 8.2主机上测试带有财富示例的简单dynamic-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/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

谢谢,对您有帮助!我必须.new/etc/pam.d/sshdsession optional pam_motd.so motd=/run/motd.new和链接的末尾添加sudo ln ds /run/motd /etc/motd。我忘了export LANG="eo"去看看命运。
batisteo

该解决方案还适用于Debian的7
azmeuk

此基本解决方案也适用于Debian Stretch 9,/run/etc/motd.dynamic.new
只需稍作

12

这些年来,这种情况发生了变化:

首先是/etc/motd(静态)。

然后,Ubuntu update-motd根据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/*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.