動的に転送されたSSHセッションをアクティブに保ち、ランダムに終了する方法は? [閉鎖]

動的に転送されたSSHセッションをアクティブに保ち、ランダムに終了する方法は? [閉鎖]

私が見つけた次の方法でSSHセッションをアクティブに保ちます。

ssh -f -D $port $SSH_HOST "
    if [ -f ~/.tunnel ]; then
        rm ~/.tunnel;
    fi;
    while [ ! -f ~/.tunnel ]; do
        echo > /dev/null;
    done
" &

次の方法でSSHセッションを終了します。

ssh $SSH_HOST "touch ~/.tunnel" 
  1. ファイルはpidファイルと同じ方法で使用されますか?このアプローチは、より多くの状況や一般的な状況に使用できますか?

  2. SSHセッションをアクティブに保ち、終了するにはファイルを使用する必要がありますか?もっと良い方法がありますか?

ありがとうございます。

答え1

簡単な改善

この技術を使用すると、リモートコンピュータの接続を終了できます。いくつかの変更を提案します

  • whileループを追加すると、待つのにsleepCPU時間を無駄にする必要はありません。
  • プロセスを逆にしてください。セッションを終了するには、最初にそのファイルをタッチしてから削除してください。必要に応じて、ファイルにPIDを含めるオプションが提供されます。

これが必要ですか?

セッションを終了するには、質問の方法を避け、次を使用します。

SSH -N -D $port $SSH_HOST &

これにより、シェルなしで接続がバックグラウンドジョブとして設定されます(-Nシェルを無効にして&バックグラウンドジョブとして設定)。

次のコマンドを使用して(ローカル)PIDを取得し、次のコマンドを$!使用して終了できます。kill

たとえば、

SSH -N -D $port $SSH_HOST &
TUNNEL_PID=$!

# Do some other stuff

kill $TUNNEL_PID

答え2

@PhilipCoulingが書いたものに加えて、奇妙だが効果的な小さなユーティリティがあります。スピナー、対話型端末セッションが開いているときに便利です。リモートホストで実行します。場合によっては、ローカルクライアントにダミーパケットを送信する以外に、多くのことはしません。窒素秒(私は窒素= 120、例)。仮想人は接続をアクティブに保ちます。

これがあなたが望むものかどうかはわかりませんが、それはまさにそれです。

関連情報