Jak ustawić dynamiczną wiadomość dnia (motd) w Debian Jessie 8.2 dla ssh?

16

Chciałbym mieć dynamiczny motd, ale nie wiem, jak to zrobić.

Próbowałem co znalazłem, dodając /etc/update-motd.d/00-header, 10-sysinfo, 90-footer, i symlinking do /etc/motd /var/run/motd.dynamic, /run/motd.dynamic, /run/motdlub /var/run/motd.

Mam następujące linie /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

Jestem także mylony z systemd.

Czy jest na to sposób? Czy ktoś mógłby podać przykład z prostą fortuną?

batisteo
źródło
nie pam_motd.so noupdatebyłoby problemu?
Jakuje

Odpowiedzi:

11

Jestem w stanie przetestować prosty przykład z dynamiką z fortuną na moim hoście Debian Jessie 8.2, jak poniżej, i odkryłem, że problem ten jest związany z błędnym zachowaniem.

mkdir /etc/update-motd.d
cd /etc/update-motd.d

Utworzono dwa pliki testowe, jak poniżej, i wykonano je

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

Jednak w tym czasie motd nie zmienił się. Więc śledzę proces sshd. Z tego śladu (interesujące części pokazano poniżej) można zobaczyć, że nowo utworzony plik motd.new zmienia nazwę na / var / run / motd. Jednak później próbuje odczytać z /run/motd.dynamic - który nigdy nie został stworzony

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

Problem wydaje się być związany z niespójnościami z modułem pam_motd. Zobacz raport o błędzie https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743286;msg=2

Po prostu zmiana lokalizacji pliku motd z /run/motd.dynamicna /run/motdin /etc/pam.d/sshd- sprawia, że ​​działa dla mnie

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

Oto przykładowy MOTD widziany podczas logowania 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
źródło
Dziękuję, pomogło! Musiałem dodać .newna końcu w /etc/pam.d/sshd: session optional pam_motd.so motd=/run/motd.newi link sudo ln ds /run/motd /etc/motd. I zapomniałem export LANG="eo", aby zobaczyć fortunę.
batisteo
To rozwiązanie działa również dla Debiana 7.
azmeuk
To podstawowe rozwiązanie działa również dla Debian Stretch 9, z drobną poprawką - plik do odczytu jest teraz/run/etc/motd.dynamic.new
cam8001
12

Zmieniło się to przez lata:

Najpierw był /etc/motd(statyczny).

Następnie Ubuntu opracowało własny pakiet update-motdoparty na skrypcie wywoływanym z crona.

Wreszcie, PAM skopiowało pomysł Ubuntu na /etc/update-motd.d/, dlatego Debian i inni również mają takie zachowanie.

Tutaj jest wyjaśnienie

https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/

Tak to jest obecnie: PAM po prostu przeczyta /var/run/motd.dynamici /etc/motdjeśli istnieje (wklej z posta)

  • /etc/motd- Klasyczny, statyczny plik. Nie istnieje już w Ubuntu 16.04 LTS, nawet jako symboliczne łącze do / var / run / motd. Jeśli zostanie utworzony, jego zawartość również zostanie wydrukowana.
  • /var/run/motd- Wykorzystano to przy pierwszej implementacji Ubuntu. Nie jest już używany. Jest to po prostu ignorowane przez PAM.
  • /var/run/motd.dynamic- To jest obecnie wyświetlane przy logowaniu. Jest aktualizowany przez /etc/init.d/motd przy każdym uruchomieniu. Jest również aktualizowany przez PAM, uruchamiając skrypty w /etc/update-motd.d/, jeśli istnieją.
  • /etc/motd.tail- Pakiet Ubuntu używany do wypełniania /etc/update-motd.d. Jeden z nich przechowałby zawartość tego pliku, dzięki czemu łatwo było dodać zawartość statyczną. Ten skrypt nie istnieje już w pakiecie, więc plik nie ma zamierzonego efektu.

Przykład z postu

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
źródło