autosshはリンクダウン時にsshを強制終了しません


10

autosshを30秒のポーリング時間で開始しました。

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

そしてそれはうまくいきます:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

しかし、ネットワークケーブルを物理的に取り外した場合、つまりトンネルが機能しなくなった場合、autosshはsshデーモンを強制終了しません。どうして?リンクがダウンしている場合、autosshは何もできないことを理解していますが、私の意見では、次のことを実行する必要があります。

  1. 子sshプロセスを確認します(check on child ...
  2. 遠端を確認してください!!! (トンネルを介したpingのような操作)
  3. トンネルがダウンしていることを認識する
  4. sshプロセスを停止します
  5. もう一度トンネルを作成してみてください
  6. それが機能しないことを認識し、(指数関数的に増加する?)タイマーを設定してすぐにもう一度チェックする

それが私がautosshを実行している理由です:トンネルに何かが起こった場合(ソフトウェアまたはハードウェアの問題である場合)、トンネルを再起動する必要があります。代わりに、sshプロセスが終了するのを待っています。接続を再確立する見込みがない場合でも、再起動しようとしているのではないですか?

autosshはどのようなチェックを行っていますか?sshが稼働していることを確認してください。遠端のチェックを行っていませんか?

編集する

要求に応じて、ssh構成の関連部分を追加します。

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

タイムアウトを短縮しようとするとどうなりますか?
Nikolaidis Fotis 14

しばらくautosshを使用しましたが、特にポート転送と組み合わせると、不安定な接続では信頼性が低くなりすぎました。現在OpenVPNを使用しており、非常に満足しています。
Nils Toedtmann 2014

@NikolaidisFotis:タイムアウトは問題ありません。・・・タイムアウトです。しかし、タイムアウトが発生するたびに、それは正しいこと(imho)を実行しません。つまり、遠端の確認です。
dangonfast 2014

@NilsToedtmann:よろしくお願いします。実装は簡単ですか?良いハウツーへのリンクはありますか?
dangonfast 2014

OpenVPNは非常に簡単です。「apt-get install」を実行して、サーバーまたはクライアントのデフォルトの構成で開始し、dev tun両方で使用remoteし、クライアントの構成で設定します。唯一の厄介なビットは、証明書の管理です。OpenVPNに付属の「easy-rsa」CAを使用します。証明書を取得したら、あとは簡単です。
Nils Toedtmann 2014

回答:


11

しかし、ネットワークケーブルを物理的に取り外した場合、つまりトンネルが機能しなくなった場合、autosshはsshデーモンを強制終了しません。どうして?

autosshはクライアントマシンで実行されるため、サーバー上のsshデーモンプロセスを直接強制終了することはできません。ただし、サーバーでClientAliveIntervalin /etc/ssh/sshd_configにゼロ以外の値を指定し(を参照man sshd_config)、サーバーでsshdサービスを再起動して構成の変更を適用できます。その後、ネットワークが切断された場合、sshデーモンプロセスはClientAliveInterval * ClientAliveCountMax(autosshではなく)秒後に強制終了されます。

ここで、「autosshがsshクライアントプロセスを強制終了しないのはなぜですか?」、指定しました-M 0。autosshのmanページから:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit

autosshを使用して接続を監視する代わりに、タイムアウトのServerAliveCountInterval * ServerAliveCountMax秒後にsshが終了するのを待っています。sshが終了する前に60のサーバーアライブチェックをリクエストしました。連続するチェックは60秒の間隔で区切られているため、sshクライアントが終了するまで1時間待機します。

またExitOnForwardFailure、クライアント側でオプションを使用することを検討することもできます(を参照man ssh_config)。これにより、トンネルを確立できない場合にsshが終了し、autosshがsshの再起動を試みることができます。


ありがとう、これは理にかなっています。実際、私はサーバープロセスではなく、「クライアントプロセス」を意味していました。
dangonfast 2014年

そして、autosshのmanページをもう一度読んだ後、私が設定した理由を覚え-M 0ています。監視ポートを使用するのは簡単ではなく、間接的に推奨されていません。多くの点で、これは監視ポートよりも優れたソリューションである可能性があります
dangonfast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.