
操作に SSH トンネルを必要とするコマンド (TCP 接続を繰り返し開く) を実行したいのですが、トンネルが存在した後、再び閉じる必要があります。私が遭遇した問題は次のとおりです。
コマンドをすぐにバックグラウンドで実行することはできますが、トンネルが設定されていることを確認する信頼できる方法はありません。
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
トンネルを開くのに 1 秒以上かかることがよくあります。さらに時間をかけることもできますが、ユーザー エクスペリエンスはあまり良くなく、信頼性も低くなります。
接続が開かれたときに SSH 自体をバックグラウンドにすることはできますが、バックグラウンド SSH プロセスの PID がわからないため、その後 SSH を強制終了する確実な方法が見つかりません。
#!/bin/bash set -e ssh -f -N -L lport:server:port host # I'd set up a trap ??? EXIT, but for what? my program that connects to localhost:lport
SSH プロセスの PID を検出する方法はありますか?
それとも、タスクを解決する別のより良い方法がありますか?
答え1
見るhttps://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnelControl Socket および ExitOnForwardFailure を含む回答の場合。