私が見つけた誰次の方法で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