永続的なバックグラウンド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).

答え2

ぜひご検討ください。autossh。接続損失が根本的な原因であることを確認し、再接続を試みる頻度を減らす特定の経験的方法があります。また、追加のトンネルを使用して接続を監視するため、要求したシナリオにも役立ちます。

たとえば、Ubuntuを使用している場合は、Web検索を介してautossh upstartトンネルを継続的に維持するようにUbuntuを設定する方法のいくつかの便利な例を見つけることができます。

私はこれを使用して、特定のサービスに対して常に私のサーバーへのオープントンネル接続を維持します。

答え3

二度目になります@0xC0000022Lの提案を使用してautossh。私はこれをある場所から別の場所に持って行くとき、私のラップトップへのSSH接続を維持するために使用し、正常に動作します。私はこの接続を使用してバックポート25と2143をトンネリングしてプライベートSMTPおよびIMAPサーバーにアクセスします。

これは私が使用するスクリプトです。

$ 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

次に、Hostファイル$HOME/.ssh/configにホストエントリを保持しますimap-o

$ 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

       SS#1

                                          SS#2

関連情報