Führen Sie ein (System-) Skript für die SSH-Anmeldung und / oder -Abmeldung aus

12

Ich möchte, dass mein OpenSSH-Server jedes Mal ein Skript startet, wenn sich ein Benutzer mit SSH anmeldet, und im Idealfall den Hostnamen oder die IP-Adresse sowie den Benutzernamen übergibt. Außerdem möchte ich, dass ein Skript ausgeführt wird, wenn eine Sitzung beendet wird (der Benutzername wird übergeben). Diese Skripte sollten nicht in der Benutzersitzung, sondern systemweit ausgeführt werden.

Die Idee ist, beim An- und Abmelden eine akustische Warnung zu geben, z. B. mit espeakund die Informationen auf einem externen Display anzuzeigen.

Ich habe gesehen, dass es ein pam-scriptsPaket gibt, bin mir aber nicht sicher, ob dies das tut, was ich will, und wie ich es verwenden soll.

Sonnenseite
quelle

Antworten:

10

Sie können Ihren SSH-Benutzern anstelle des von ihnen angeforderten Befehls (oder ihrer Shell, wenn sie keinen bestimmten Befehl geben) einen Befehl aufzwingen. Dies kann durch Angeben dieses Befehls mit etwas wie ForceCommand /root/ssh-wrapperin erreicht werden /etc/ssh/sshd_config(es spielt keine Rolle, wo sich das Skript befindet oder wie es benannt ist, stellen Sie nur sicher, dass es von allen Benutzern ausführbar ist und die sshd-Konfigurationsdatei darauf verweist). Sie müssen auch neu starten / neu laden sshd. Der ursprüngliche Befehl ist für den erzwungenen Befehl als zugänglich $SSH_ORIGINAL_COMMAND.

Ich habe dieses Skript gerade zusammen gehackt:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

Jedes Mal, wenn ich mich anmelde oder abmelde, wird mir eine Stimme darüber informiert, und ein Protokolleintrag wird in syslog geschrieben. Es protokolliert auch den Befehl. Sie können Folgendes verwenden, um Ihre SSHD-Nutzung zu "verfolgen":

tailf /var/log/syslog | grep ssh-wrapper

Bitte beachten Sie, dass dieses Skript größtenteils ungetestet ist, verwenden Sie es also auf eigenes Risiko! ;-)

PS: Denken Sie daran, dass dieses Skript als der Benutzer ausgeführt wird, der sich angemeldet hat. Sie können also nicht alles tun, was Sie möchten, wenn Sie es ändern, um weitere Funktionen hinzuzufügen ...

JanC
quelle
Hallo, Gibt es eine Möglichkeit, eine Situation zu erkennen, in der der Benutzer gerade das Fenster mit ssh client geschlossen hat? Dein Skript hakt diese Situation nicht. Danke.
Dmitry Eskin
Sollte shellin $ {SSH_ORIGINAL_COMMENT: -shell} durch den tatsächlichen Pfad zur Shell ersetzt werden, z. / bin / bash? Wenn ich nur versuche, das auszuführen, beschwert es sich, dass es keinen solchen Befehl wie Shell gibt. Vielleicht haben Sie $ SHELL gemeint? Das sollte die angegebene Shell des Benutzers ausführen.
Ibrahim
1

Ich habe diese Übereinstimmungsereignisse bereits in der Protokolldatei gesehen (was Ihnen Flexibilität bei der Zuordnung von Elementen ermöglicht). Diese Seite ist schlecht formatiert, kann Ihnen jedoch den Einstieg erleichtern : https://help.ubuntu.com/community/AudibleLogs#Mit esound spielen

Kanaka
quelle
Ich denke du / sie meinst espeakstatt esound?
30.
0

(Antwort von derselben Frage auf ServerFault abgeglichen )

Schreiben Sie einfach ein Skript, um das zu tun, was Sie wollen, und stecken Sie es dann ein /etc/profileoder hängen Sie es möglicherweise /etc/bash.bashrcvon Ihren Bedürfnissen ab. Änderungen an diesen Dateien gelten für alle Benutzer. Ich bin mir jedoch nicht sicher, wie Sie beim Abmelden benachrichtigt werden sollen.

Alternativ kann dies auch durch eine einfache Daemon-Überwachung /var/log/authfür neue (und schließende) ssh-Sitzungen erreicht werden. Auf diese Weise können Benachrichtigungen sowohl beim Anmelden als auch beim Abmelden gesendet werden.

EEAA
quelle
0

Du kannst den sshrc benutzen (man sshd, suche nach sshrc)

ssh führt die Datei / etc / ssh / sshrc aus, falls vorhanden, und Sie können von dort aus ein Skript ausführen (oder mehrere Skripte aufrufen)

Sie können eine beliebige Bash-Variable aufrufen $USERoder die IP über abrufen

read -d " " ip <<< $SSH_CONNECTION

Sie können ein Skript schreiben, um zu testen oder zu protokollieren, was immer Sie wollen.

Abmeldeskript ... nun, das ist es, wonach ich suche! : D

Higuita
quelle
0

Ich denke, PAM ist die beste Option. Es ist systemweit und kann nicht von den Konfigurationsdateien des Benutzers überschrieben werden.

Sie können diesen Schritten folgen. Sie haben für mich auf Ubuntu 14.04.4 LTS gearbeitet.

Lauf:

$ sudo pico /opt/custom/bin/info-session.sh

Bearbeiten Sie diese leere Datei und fügen Sie diese Zeilen hinzu:

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

Danach erteilen Sie dem Skript die Ausführungsberechtigung:

$ sudo chmod ugo+x /opt/custom/bin/info-session.sh

Führen Sie nun Folgendes aus:

$ sudo pico /etc/pam.d/common-session

Fügen Sie diese Zeilen am Ende der Datei hinzu:

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

Es ist nicht erforderlich, einen Dienst neu zu starten. Beachten Sie, dass dieses Skript auch ausgeführt wird, wenn sich ein Benutzer anstelle von SSH über das Terminal anmeldet.

Hinweis 1: Sie können an einen espeakbeliebigen anderen Prozess weiterleiten, der Ihren Anforderungen entspricht (E-Mail, Push-Benachrichtigung usw.). Wenn Sie verwenden writeund der Benutzer angemeldet ist, wird er oder sie Ausgabemeldungen direkt auf seinem Terminal sehen.

Referenzen:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on -Benutzer-Anmeldung/

Verwandte Themen:
Wie richte ich eine E-Mail-Benachrichtigung ein, wenn eine SSH-Anmeldung erfolgreich war?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / email-benachrichtigung-über-jede-ssh-verbindung-zum-linux-server

Pestro
quelle