Как установить динамическое Сообщение дня (motd) в Debian Jessie 8.2 для ssh?

16

Я хотел бы иметь динамический 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.

Есть ли способ сделать это? Может ли кто-нибудь привести пример с простым состоянием?

batisteo
источник
не pam_motd.so noupdateбыло бы проблемы там?
Jakuje

Ответы:

11

Я могу протестировать простой динамический пример с motd на моем хосте Debian Jessie 8.2, как показано ниже, и обнаружил, что проблема связана с ошибочным поведением.

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

Вот пример MOTD, замеченный во время входа в систему через ssh ...

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
VenkatC
источник
Спасибо, это помогло! Мне пришлось добавить .newв конце в /etc/pam.d/sshd: session 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
cam8001
12

Это изменилось за эти годы:

Сначала был /etc/motd(статичный).

Затем Ubuntu разработала собственный пакет, update-motdоснованный на скрипте, который вызывается из cron.

Наконец, PAM скопировал идею Uetntu о /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- Пакет Ubuntu, используемый для заполнения /etc/update-motd.d. Один из них следил за содержимым этого файла, поэтому было легко добавить статический контент. Этот скрипт больше не существует в пакете, поэтому файл не имеет ожидаемого эффекта.

Пример из поста

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/*
nachoparker
источник