Chcę wyświetlić baner (wiadomość powitalną) dla użytkowników SSH z konkretną wiadomością powitalną dla każdego użytkownika.
Nie określono, jakiego serwera SSH używasz. Zakładam OpenSSH.
Zauważ, że banner SSH i MOTD to dwie różne rzeczy.
Chociaż są prawie nie do odróżnienia w terminalu SSH, zachowują się inaczej, na przykład w kliencie SFTP.
MOTD to tylko tekst wydrukowany na interaktywnym terminalu. Nie będzie więc (i nie może) zostać wysłany do klientów SFTP, na przykład (więcej o tym później).
MOTD jest zakodowany na /etc/motd
stałe w OpenSSH. Możesz włączyć / wyłączyć tylko globalnie, korzystając z PrintMotd
dyrektywy.
Jednak w niektórych systemach Linux PrintMotd
opcja jest zawsze wyłączona, a plik MOTD jest drukowany przez stos PAM (za pomocą pam_motd
modułu). W takim przypadku możesz go wyłączyć za pomocą /etc/pam.d/sshd
lub określić niestandardową motd=
ścieżkę jako parametr modułu.
Sztandar SSH to specjalna funkcja SSH 2.0, wysyłana w określonym pakiecie SSH (SSH2_MSG_USERAUTH_BANNER).
W związku z tym nawet klienci nieterminalni, tacy jak klienci SFTP, mogą go przetwarzać i wyświetlać użytkownikowi. Zobacz na przykład, jak wyświetla się baner w kliencie WinSCP SFTP / SCP .
SSH baner jest konfigurowalny za użytkownika (lub grupy lub innych kryteriów) w sshd_config
Używanie Banner
a Match
dyrektywami :
Match User username1
Banner /etc/banner_user1
Match User username2
Banner /etc/banner_user2
Zobacz także Wyłącz baner ssh dla określonych użytkowników lub ips .
Oczywiście możesz również użyć niestandardowej implementacji wiadomości / banera. Wystarczy wydrukować wiadomość wybraną za pomocą niestandardowej logiki ze skryptu profilu globalnego.
Podobnie jak w przypadku MOTD, nie zadziała to w przypadku sesji nieinteraktywnych (SFTP i podobnych).
Co ważniejsze, nie tylko to nie zadziała, musisz upewnić się, że wydrukujesz wiadomość tylko dla terminala interaktywnego. Co OpenSSH robi automatycznie dla /etc/motd
. Użyj skryptu profilu globalnego, który działa tylko dla terminala interaktywnego, lub wydrukuj komunikat warunkowo na podstawie wartości TERM
zmiennej środowiskowej.
Jeśli wydrukujesz wiadomość dla sesji nieinteraktywnej, zepsujesz dowolnego klienta, który używa ścisłego protokołu, takiego jak SFTP lub SCP, ponieważ klient spróbuje zinterpretować wiadomość tekstową jako wiadomość protokołu, co nie powiedzie się.
Zobacz na przykład opis takiego problemu w dokumentacji klienta WinSCP SFTP / SCP .
(Jestem autorem WinSCP)
groups|awk '{print $1}'
cat /etc/motd.${PGROUP} przed dodaniem tego wiersza tworzę plik banerowy dla każdego użytkownika w katalogu / etc. i plik jak motd.root i motd.alex i ta praca dla mnie.Możesz także użyć
"$HOME/.ssh/rc"
pliku do zarchiwizowania tego, co chcesz zrobićTak więc możesz mieć jeden ssh rc dla każdego użytkownika.
źródło