(制御ソケットを介して)接続共有のためにバックグラウンドで実行されているbashプロファイルスクリプトからSSHを生成しようとしています。私が経験している問題は、TTYが閉じられた後(またはより直接的に親bashシェルが終了した後)、SSHがまだ実行されないようにする安定した方法です。
私はシェルが正常にシャットダウンしたとき(SSHを終了するために)コマンドを実行できることを知っていますが、シェルが閉じる機会がない可能性のあるすべてのシナリオを処理しようとしています。
これを行う賢明な方法はありますか?
私の最高のアイデアは
ssh -o PermitLocalCommand=yes -o LocalCommand='cat >/dev/null; kill $PPID' $HOST &
ただし、成功した実行後にバックグラウンドに移動するコマンドのみが必要なため、これは機能しません。または、SSHが完了した後はバックグラウンドでのみ機能するため、シェルは-fN
代わりに使用できません。&
-f
LocalCommand
また、リモートホストでコマンドを実行しないようにしています。そうでなければ、私は次のことをすることができますssh -fN $HOST 'cat >/dev/null'
ベストアンサー1
シェルがログインシェルの場合は、~/.bash_logoutファイルでデフォルトのSSH接続を停止できます。
ssh -O exit hostname
シェルがログインシェルでない場合は、SSHを作成した直後に〜/ .bashrcファイルにトラップを設定できます。
ssh -fN hostname
trap 'ssh -O exit hostname' EXIT