終了時の SSH LocalCommand

終了時の SSH LocalCommand

では、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セッションがログイン シェル (リモート コマンドではなく) の場合は、シェルを終了するときにbashsource が実行されます/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.

関連情報