SSH LocalCommand beim Beenden

9

In können ~/.ssh/configSie die LocalCommandAnweisung verwenden, um einen lokalen Befehl auszuführen, wenn Sie über SSH eine Verbindung zu einem Remotecomputer herstellen. Aber wie führe ich einen Befehl , wenn ich verlassen eine SSH - Verbindung? Es scheint, dass * .bashrc / .bash_profile * -Dateien nicht bezogen werden, wenn die Verbindung beendet oder geschlossen wird.

Roberto Aloi
quelle
Diese Frage steht in engem Zusammenhang mit unix.stackexchange.com/questions/40830/…
Bananguin

Antworten:

11

In der Frage wird nicht angegeben, ob dies auf dem lokalen oder Remote-Computer ausgeführt werden soll. Es ist auch nicht angegeben, welche Shell auf beiden Computern vorhanden ist, daher gehe ich von bashbeiden aus.

Wenn Sie es auf dem Remotecomputer ausführen möchten, sehen Sie sich an ~/.bash_logout, was ausgeführt wird, wenn sich eine Anmeldeshell ordnungsgemäß abmeldet. Von man bash:

Wenn eine Anmeldeshell beendet wird, liest bash Befehle aus der Datei und führt sie aus ~/.bash_logout, falls vorhanden.

Sie können einen Test durchführen ~/.bash_logout, um zu überprüfen, ob es sich bei der abgemeldeten Shell um eine SSH-Sitzung handelt. Folgendes sollte funktionieren:

if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
    # commands go here
fi

Wenn Sie es auf dem lokalen Computer ausführen möchten, erstellen Sie einen Funktionsumbruch ssh. So etwas sollte funktionieren:

ssh() {
    if command ssh "$@"; then
        # commands go here
    fi
}

Das mag für Ihre Bedürfnisse zu einfach sein, aber Sie haben die Idee.

Chris Down
quelle
Ich brauchte den Befehl, um auf dem lokalen Computer ausgeführt zu werden. Danke für den Vorschlag. Es funktioniert reibungslos.
Roberto Aloi
1

Du bist auf dem richtigen Weg. Wenn es sich bei der sshSitzung um eine Anmeldeshell handelt (anstelle eines Remote-Befehls), bashwird die Quelle erstellt /etc/bash.logoutund ~/.bash_logoutwenn Sie die Shell verlassen.

Wenn Sie einen Remote-Befehl ausführen möchten, können Sie basheine Anmeldeshell erzwingen . Das LocalCommandkönnte ähnlich sein:

bash -l -c /execute/some/command

Von man 1 bash

-c string   If  the  -c  option  is  present, then commands are read from 
string.  If there are arguments after the string, they are assigned to 
the positional parameters,  starting with $0.
-l   Make bash act as if it had been invoked as a login shell 

When  a login shell exits, bash reads and executes commands from the 
files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.
George M.
quelle
1
Nicht, wenn ein Remote-Befehl ausgeführt wird (Wenn ein Befehl angegeben ist, wird er auf dem Remote-Host anstelle einer Anmeldeshell ausgeführt.) Wenn Sie jedoch die OP-Frage genauer lesen, scheint es, dass er möchte, dass etwas vor Ort passiert. Ich denke, Ihre Antwort ist angemessener.
George M