そこからの回答は私を大いに助けました、このコマンドは私が必要なことをします:
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 -f(代わりにbash「永遠に」コマンドでもないように思える)の代わりに電話をかけようとしましたが、うまくいきません。
だから、誰もこの動作を説明してもらえますか?バックグラウンドssh接続を作成してリバースsshトンネルを維持する正しい方法は何ですか?
whileループが繰り返し実行され、ssh5秒ごとに新しいバックグラウンド接続が開始されますよね?これは私が必要とするものではありません。


&sshコマンドの最後に使用するのはどうssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &