Befehl erzwingen, um beim Abmelden oder Trennen ausgeführt zu werden?

13

Ich melde mich über SSH bei einem System an und möchte einen Befehl erzwingen können, der beim Abmelden ausgeführt wird, unabhängig davon, ob es sich um eine absichtliche Abmeldung handelt (Verlassen der Shell) oder weil meine SSH-Verbindung unterbrochen / beendet wurde. Gibt es eine Möglichkeit, dies einzurichten? Ich rate momentan, die Login-Shell in ein Programm zu ändern, das das beim Schließen von SSH gesendete Signal abfängt (SIGHUP?) Und dann den Befehl ausführt, aber ich frage mich, ob es eine sauberere Lösung gibt.

David
quelle
Möchten Sie den Befehl auf dem Remote-Computer oder auf dem Computer ausführen, von dem aus Sie die Verbindung initialisiert haben?
xx4h

Antworten:

20

Der beste Weg, dies zu tun, wäre die Verwendung von pam .

In werden /etc/pam.dSie mehrere Dateien haben, von denen eine aufgerufen wird sshd. Wenn Sie nur ssh und keine anderen Anmeldungen (z. B. eine grafische Benutzeroberfläche oder echtes TTY) beeinflussen möchten, möchten Sie diese Datei.
Wenn Sie alle Anmeldungen beeinflussen möchten, benötigen Sie eine "gemeinsame" Datei. Der Name dieser anderen "allgemeinen" Datei variiert je nach Distribution. Sie können ihn jedoch ermitteln, indem Sie den Anweisungen includeund substackin der sshdDatei folgen, bis Sie zur Basisdatei gelangen.

Wenn Sie die Datei identifiziert haben, die /etc/pam.dSie verwenden möchten, fügen Sie dem sessionAbschnitt eine Zeile wie die folgende hinzu :

session     optional    pam_exec.so quiet /etc/pam_session.sh

Dies führt dazu, dass /etc/pam_session.shjedes Mal, wenn sich jemand anmeldet oder abmeldet, ein Anruf getätigt wird (ob ordnungsgemäß oder nicht ordnungsgemäß).

Jetzt müssen Sie nur noch erstellen /etc/pam_session.sh. Im Folgenden finden Sie ein Beispiel, mit dem Sie bei jeder Abmeldung einen Befehl ausführen können:

#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
  something
fi

(vergiss nicht chmod a+xdas Drehbuch)

Patrick
quelle