![アドレス/ポートが利用可能な場合にのみSSHポート転送を実行する方法は? [コピー]](https://linux33.com/image/14261/%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%2F%E3%83%9D%E3%83%BC%E3%83%88%E3%81%8C%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AE%E3%81%BFSSH%E3%83%9D%E3%83%BC%E3%83%88%E8%BB%A2%E9%80%81%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
デフォルトでは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
いくつかの検索の最後に見つかったウィキブックテストは次の方法で実行できます。
- ControlMasterファイルを使用したポート転送の作成
ssh -f -N -M -S /tmp/ssh_pf_%r-%h-%p -L 8080:127.0.0.1:8080 server
そして、
- 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
より良いオプションがあるかもしれませんが、これまではこれがうまくいくようです。