永続的なバックグラウンドSSH接続を使用してリバーストンネルを作成する:正しい方法は何ですか?

永続的なバックグラウンドSSH接続を使用してリバーストンネルを作成する:正しい方法は何ですか?

関連質問:サーバー - クライアント SSH 接続の開始

そこにある回答は私にとって非常に有用であり、このコマンドは私の要件を満たしています。

ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP

だから私は常に再接続するスクリプトを書いています。

 #!/bin/bash

 while true; do
    echo "try to connect..."
    ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
    echo "restarting in 5 seconds.."
    sleep 5
 done

に追加しましたが、/etc/crontabシェルで「手動で」実行すると機能しますが、cronから呼び出すとsshが接続されてすぐに完了することがわかりました。 (これで上記のスクリプトは常に再接続されます)

私はバックグラウンド接続のためにman sshキーを使って呼び出す必要があることに気づきましたが、-nこれは役に立ちませんでした。その後、同様のスクリプトを見て、tail -f something「終わらない」コマンドを呼び出すとうまくいくことがわかりました。だから私は空のファイルを作成し、/tmp/dummy_file今sshコマンドは次のようになります。

ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file

今大丈夫!ただし、このソリューションは少し見苦しく見え、この動作の実際の理由を実際には理解していません。偶然代わりbashに呼び出しを試みましたがtail -fbash私の考えでは「終わりのない」コマンドでもあります)、うまくいきませんでした。

もしそうなら、誰もがこの動作を説明することができ、バックグラウンドSSHトンネルを実行し続けるためにバックグラウンドSSH接続を作成する正しい方法は何ですか?

ベストアンサー1

-Nsshオプションが欲しいようです。

 -N      Do not execute a remote command.  This is useful for just forwarding ports
         (protocol version 2 only).

おすすめ記事