アドレス/ポートが利用可能な場合にのみSSHポート転送を実行する方法は? [コピー]

アドレス/ポートが利用可能な場合にのみSSHポート転送を実行する方法は? [コピー]

デフォルトではSSHとポート転送を使用したいと思います。そのため、次のsshコマンドをスクリプトに追加しました(仮想サーバー名を使用)。

ssh -f -N user@server -L 8080:server:8080

serverリモートサーバーはどこにありますか?スクリプトが2番目に実行される場合を除いて、すべてがうまく機能します。 sshは文句を言う。

bind [127.0.0.1]:8080: Address already in use

sshポート/アドレスが利用可能な場合にのみテストし、ポート転送を実行するように指示する方法はありますか?

ベストアンサー1

いくつかの検索の最後に見つかったウィキブックテストは次の方法で実行できます。

  1. ControlMasterファイルを使用したポート転送の作成

ssh -f -N -M -S /tmp/ssh_pf_%r-%h-%p -L 8080:127.0.0.1:8080 server

そして、

  1. ControlMasterファイルを使用して接続が確立されているかどうかをテストします。

ssh -O check -S /tmp/ssh_pf_%r-%h-%p server

要約すると、次は接続がまだ確立されていない場合にのみ接続を確立します(2番目の接続試行を保存するようです)。

if ! ssh -O check -S /tmp/ssh_pf_%r-%h-%p server ;
then ssh -f -N -M -S /tmp/ssh_pf_%r-%h-%p -L 8080:127.0.0.1:8080 server ; fi

指摘したとおりこの回答、以下のようにControlMasterファイルを使用して接続を簡単に閉じることもできます。

ssh -O exit -S /tmp/ssh_pf_%r-%h-%p server

より良いオプションがあるかもしれませんが、これまではこれがうまくいくようです。

おすすめ記事