そこにある回答は私にとって非常に有用であり、このコマンドは私の要件を満たしています。
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接続を作成する正しい方法は何ですか?
ベストアンサー1
-N
sshオプションが欲しいようです。
-N Do not execute a remote command. This is useful for just forwarding ports
(protocol version 2 only).