Mit ~/.ssh/config
dieser Direktive können Sie LocalCommand
einen 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 bash
beiden 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_logout
um 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 ssh
Sitzung eine Login-Shell ist (anstelle eines Remote-Befehls), bash
wird die Quelle angezeigt /etc/bash.logout
, ~/.bash_logout
wenn Sie die Shell verlassen.
Wenn Sie einen Remote-Befehl ausführen möchten, können Sie bash
eine Login-Shell erzwingen. Das LocalCommand
kö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.