そこからの回答は私を大いに助けました、このコマンドは私が必要なことをします:
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
ループが繰り返し実行され、ssh
5秒ごとに新しいバックグラウンド接続が開始されますよね?これは私が必要とするものではありません。
&
sshコマンドの最後に使用するのはどうssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &