終了時にSSH LocalCommand

終了時にSSH LocalCommand

SSHを介してリモートコンピュータに接続するたびに、このディレクティブを使用して~/.ssh/configローカルLocalCommandコマンドを実行できます。しかし、私はいつ出口SSH接続? *.bashrc/.bash_profile* ファイルは、接続の終了またはクローズ時にインポートされないようです。

答え1

ローカルシステムまたはリモートシステムでこれを行うかどうかの仕様はありません。どのシステムにどのシェルが存在するかについての仕様もないので、両方のbashシステムに存在すると仮定します。

リモートコンピュータで実行するには、~/.bash_logoutログインシェルが正常にログアウトしたときに実行されることを確認してください。からman bash

ログインシェルが終了すると、bash はファイルが~/.bash_logout存在する場合はそのコマンドを読み込み実行します。

~/.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シェルを終了したときにソースを取得します/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.

関連情報