関連質問: サーバーからクライアントへの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
、つまり「neverending」コマンドを呼び出すと機能することがわかったので、空のファイル/tmp/dummy_file
を作成すると、sshコマンドは次のようになります。 :
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@Host tail -f /tmp/dummy_file
それは今動作します!しかし、この解決策は少し見苦しいようです。さらに、その動作の実際の理由がよくわかりません。たまたま、tail -f
の代わりにbash
を呼び出そうとしましたが(bash
も "neverending"コマンドのように見えます)、機能しません。
だから、誰もがこの動作を説明してもらえますか?リバースsshトンネルを維持するためにバックグラウンドssh接続を作成する正しい方法は何ですか?
-N
sshのオプション。
-N Do not execute a remote command. This is useful for just forwarding ports
(protocol version 2 only).
autossh
を検討することを強くお勧めします。接続の喪失が根本的な原因であるかどうかを判断し、再接続の試行頻度を下げる特定のヒューリスティックがあります。さらに、追加のトンネルを使用して接続を監視するため、要求しているようなシナリオで非常に役立ちます。
たとえば、Ubuntuを使用している場合は、autossh upstart
をWeb検索して、Ubuntuを構成してトンネルが持続的に維持されるようにするための便利な例を見つけることができます。
これを使用して、特定のサービスのためにサーバーへのトンネル接続を常に開いたままにしています。
次に @ 0xC0000022Lの提案 を使用し、autossh
も使用します。私はラップトップからのSSH接続を維持するためにそれを使用しています。私はそれをある場所から別の場所に持って行き、それがうまくいくようにしています。この接続を使用して、個人用のSMTPサーバーとIMAPサーバーにアクセスするために、ポート25と2143をトンネルバックします。
これが私が使用するスクリプトです:
$ more /home/saml/bin/autossh_mail.sh
#!/bin/bash
autossh -M 0 -f -N -L 2025:localhost:25 -L 2143:localhost:143 sam@imap-o
次に、ホスト$HOME/.ssh/config
のimap-o
ファイルにHost
エントリを保持します。
$ more $HOME/.ssh/config
ServerAliveInterval 15
ForwardX11 yes
ForwardAgent yes
ForwardX11Trusted yes
GatewayPorts yes
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
IdentityFile ~/.ssh/id_dsa
Host imap-o
User sam
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
ログインすると、autossh_mail.sh
スクリプトがデスクトップの一部として実行されます。gnome-session-properties
からアクセスできます。