私が見つけた誰次の方法で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"
ファイルはpidファイルと同じ方法で使用されますか?このアプローチは、より多くの状況や一般的な状況に使用できますか?
SSHセッションをアクティブに保ち、終了するにはファイルを使用する必要がありますか?もっと良い方法がありますか?
ありがとうございます。
答え1
簡単な改善
この技術を使用すると、リモートコンピュータの接続を終了できます。いくつかの変更を提案します
- whileループを追加すると、待つのに
sleep
CPU時間を無駄にする必要はありません。 - プロセスを逆にしてください。セッションを終了するには、最初にそのファイルをタッチしてから削除してください。必要に応じて、ファイルに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、例)。仮想人は接続をアクティブに保ちます。
これがあなたが望むものかどうかはわかりませんが、それはまさにそれです。