では、SSH経由でリモートマシンに接続するたびにローカルコマンドを実行するためのディレクティブを~/.ssh/config
使用できます。しかし、LocalCommand
出口SSH 接続ですか? 接続が終了したり閉じられたりすると、*.bashrc/.bash_profile* ファイルがソース化されないようです。
答え1
質問では、これをローカル マシンで実行するのか、リモート マシンで実行するのかは指定されていません。また、どちらのマシンにどのシェルが存在するかも指定されていないため、bash
両方に存在するものと想定しています。
これをリモート マシンで実行する場合は、~/.bash_logout
ログイン シェルが正常にログアウトするときに実行される を参照してください。 からman bash
:
ログイン シェルが終了すると、ファイル
~/.bash_logout
が存在する場合は bash はそこからコマンドを読み取って実行します。
~/.bash_logout
ログアウトするシェルが SSH セッションであるかどうかを確認するには、次のようなテストを実行できます。
if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
# commands go here
fi
ローカルマシンで実行したい場合は、 の関数ラッパーを作成しますssh
。次のようなものが機能するはずです。
ssh() {
if command ssh "$@"; then
# commands go here
fi
}
それはあなたのニーズには単純すぎるかもしれませんが、その考え方は理解できるでしょう。
答え2
正しい方向に進んでいます。ssh
セッションがログイン シェル (リモート コマンドではなく) の場合は、シェルを終了するときにbash
source が実行されます/etc/bash.logout
。~/.bash_logout
リモート コマンドを実行したい場合は、bash
ログイン シェルを強制することができます。LocalCommand
次のようになります。
bash -l -c /execute/some/command
から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.