終了時のSSH LocalCommand


9

では~/.ssh/configLocalCommandディレクティブを使用して、SSH経由でリモートマシンに接続するたびにローカルコマンドを実行できます。しかし、SSH接続を終了するときにコマンドを実行するにはどうすればよいですか?* .bashrc / .bash_profile *ファイルは、接続が終了したとき、または閉じたときに取得されないようです。


回答:


11

これをローカルマシンまたはリモートマシンで実行するかどうかは、質問では指定されていません。また、どちらのマシンにどのシェルが存在するかも指定されていない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
}

それはあなたのニーズには単純すぎるかもしれませんが、あなたは考えを理解します。


ローカルマシンでコマンドを実行する必要がありました。提案をありがとう。スムーズに動きます。
Roberto Aloi

1

あなたは正しい軌道に乗っています。場合は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.

1
リモートコマンドを実行する場合(コマンドが指定されている場合は、ログインシェルの代わりにリモートホストで実行されます)。しかし、OPの質問をよく読んでみると、彼はローカルで何かが発生したいと思っているようです。
ジョージM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.