SSH MOTD pro Benutzer

17

Ich möchte SSH-Benutzern ein Banner (Begrüßungsnachricht) mit einer bestimmten Begrüßungsnachricht für jeden Benutzer anzeigen.

user260277
quelle

Antworten:

38

Sie haben nicht angegeben, welchen SSH-Server Sie verwenden. Ich gehe von OpenSSH aus.

Beachten Sie, dass das SSH-Banner und die MOTD zwei verschiedene Dinge sind.

Während sie in einem SSH-Terminal kaum zu unterscheiden sind, weisen sie ein anderes Verhalten auf, z. B. in einem SFTP-Client.


Die MOTD ist nur ein Text, der auf einem interaktiven Terminal gedruckt wird. So wird (und kann) es beispielsweise nicht an SFTP-Clients gesendet (dazu später mehr).

Die MOTD ist /etc/motdin OpenSSH fest codiert . Sie können es nur global mit der PrintMotdDirektive ein- und ausschalten .

Auf einigen Linux-Systemen PrintMotdist die Option jedoch immer deaktiviert und die MOTD wird stattdessen vom PAM-Stapel gedruckt (mithilfe des pam_motdModuls). In diesem Fall können Sie es über /etc/pam.d/sshddeaktivieren oder einen benutzerdefinierten motd=Pfad als Modulparameter angeben .


Das SSH-Banner ist eine spezielle SSH 2.0-Funktion, die in einem bestimmten SSH-Paket (SSH2_MSG_USERAUTH_BANNER) gesendet wird.

Selbst Nicht-Terminal-Clients wie SFTP-Clients können dies verarbeiten und dem Benutzer anzeigen. Sehen Sie sich beispielsweise an, wie das Banner im WinSCP SFTP / SCP-Client angezeigt wird .

Das SSH - Banner ist konfigurierbar pro Benutzer (oder eine Gruppe oder anderen Kriterien) in den sshd_configmit der Bannerund den MatchRichtlinien :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

Siehe auch SSH-Banner für bestimmte Benutzer oder IPS deaktivieren .


Natürlich können Sie auch eine benutzerdefinierte Implementierung für die Nachricht / das Banner verwenden. Drucken Sie einfach eine Nachricht aus, die mit Ihrer benutzerdefinierten Logik aus einem globalen Profilskript ausgewählt wurde.

Wie bei der MOTD funktioniert dies nicht bei nicht interaktiven Sitzungen (SFTP und Ähnliches).

Noch wichtiger ist, dass dies nicht nur nicht funktioniert, sondern auch sichergestellt werden muss, dass die Nachricht nur für ein interaktives Terminal gedruckt wird. Was OpenSSH automatisch für die /etc/motd. Verwenden Sie entweder ein globales Profilskript, das nur für ein interaktives Terminal ausgeführt wird, oder drucken Sie die Nachricht abhängig vom Wert der TERMUmgebungsvariablen.

Wenn Sie die Nachricht für eine nicht interaktive Sitzung drucken, unterbrechen Sie jeden Client, der ein striktes Protokoll verwendet, wie z. B. das SFTP oder das SCP, da der Client versucht, Ihre Textnachricht als Protokollnachricht zu interpretieren, was fehlschlägt.

Eine Beschreibung dieses Problems finden Sie beispielsweise in der Dokumentation zum WinSCP SFTP / SCP-Client .

(Ich bin der Autor von WinSCP)

Martin Prikryl
quelle
Hallo, danke für die Antwort, ich habe die Lösung, bitte korrigiere mich, wenn ich falsch liege. Ich füge diese Zeilen in die Datei / etc / profile ein. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} Vor dem Hinzufügen dieser Zeile erstelle ich eine Bannerdatei für jeden Benutzer im Verzeichnis / etc. und Datei wie motd.root und motd.alex und diese Arbeit für mich.
user260277
Das sollte auch gehen. Abgesehen von meiner Antwort funktioniert dies nur in einem interaktiven Terminal. Es funktioniert nicht für SFTP und ähnliches.
Martin Prikryl
interaktives Terminal bedeutet?
user260277
Es ist ein Terminal, mit dem ein Mensch interagiert (im Gegensatz zu einer SFTP-Sitzung, einer SCP-Sitzung oder einem nicht interaktiven Terminal, das für die Remote-Ausführung einer Batch-Aufgabe verwendet wird)
Martin Prikryl
Ich habe einige knifflige Details zur benutzerdefinierten Implementierung des Banners hinzugefügt.
Martin Prikryl
9

Sie können die "$HOME/.ssh/rc"Datei auch für die Archivierung verwenden, was Sie tun möchten

echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World

Sie können also für jeden Benutzer einen ssh rc haben.

c4f4t0r
quelle
hi, ich versuche dies aber es gibt eine fehlermeldung .ssh / rc: 1: .ssh / rc: welcom: nicht gefunden.
user260277
War
"Wolrd" ist auch ein Tippfehler :)
Simon
Ich erhalte "stty: standard input: Unpassendes ioctl für Gerät".
Bis auf weiteres angehalten.
Was hast du in .ssh / rc?
c4f4t0r