SSH LocalCommand beim Beenden

SSH LocalCommand beim Beenden

Mit ~/.ssh/configdieser Direktive können Sie LocalCommandeinen lokalen Befehl ausführen, wenn Sie sich über SSH mit einem Remote-Computer verbinden. Aber wie führe ich einen Befehl aus, wenn ichAusfahrteine SSH-Verbindung? Es scheint, dass *.bashrc/.bash_profile*-Dateien nicht als Quelle verwendet werden, wenn die Verbindung endet oder geschlossen wird.

Antwort1

In der Frage wird nicht angegeben, ob dies auf dem lokalen oder Remotecomputer ausgeführt werden soll. Es wird auch nicht angegeben, welche Shell auf den einzelnen Computern vorhanden ist, daher gehe ich davon aus, dass es auf bashbeiden Computern vorhanden ist.

Wenn Sie es auf dem Remote-Rechner ausführen möchten, sehen Sie sich an ~/.bash_logout, das ausgeführt wird, wenn sich eine Login-Shell ordnungsgemäß abmeldet. Von man bash:

Wenn eine Login-Shell beendet wird, liest und führt Bash Befehle aus der Datei aus ~/.bash_logout, sofern diese vorhanden ist.

Sie können einen Test durchführen, ~/.bash_logoutum zu prüfen, ob es sich bei der Shell, aus der Sie sich abmelden, um eine SSH-Sitzung handelt. So etwas wie das Folgende 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 Funktionswrapper darum ssh. So etwas wie das Folgende sollte funktionieren:

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

Das ist für Ihre Anforderungen vielleicht zu einfach, aber Sie verstehen, was ich meine.

Antwort2

Sie sind auf dem richtigen Weg. Wenn die sshSitzung eine Login-Shell ist (anstelle eines Remote-Befehls), bashwird die Quelle angezeigt /etc/bash.logout, ~/.bash_logoutwenn Sie die Shell verlassen.

Wenn Sie einen Remote-Befehl ausführen möchten, können Sie basheine Login-Shell erzwingen. Das LocalCommandkönnte ungefähr so ​​aussehen:

bash -l -c /execute/some/command

Ausman 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.

verwandte Informationen