web-dev-qa-db-ja.com

SSHがしばらくアイドル状態になった場合にSSHが切断されないようにする方法

私は30分ユーザー入力がないとそのマシンによって切断されるマシンへのSSH接続を持っています。しかし、私がtopのようなものを始めても、接続は生きたままです。これはクライアントのマシンなので、そのマシンのSSHサーバを再設定することはできません。だから私は自動的にアイドル状態を検出してtopのような何かを始める方法を探しています。 Bash用の「スクリーンセーバー」のようなもの。

私はscreenでそれができることを知っていますが、残念ながらscreenはインストールされていません、そして私はソフトウェアをインストールすることができません。だから私はBashが提供するものを使う必要があります。

わかりやすくするために、ログイン後に一度起動して、その端末を使用して、2時間後に戻って戻ってきて、何も入力せずに作業を続けたいというソリューションを探しています。また、私はトンネルのものを探していません(そのために私は素晴らしいツール sshuttle をお勧めします)

何か案は?

45
Isaac

わかりやすくするために、ログイン後に一度起動して、その端末を使用して、2時間後に戻って戻ってきて、何も入力せずに作業を続けたいというソリューションを探しています。

問題は、アイドルセッションをドロップしているもの(通常はファイアウォールまたはロードバランサ)があることです。セッションキープアライブを設定した場合、キープアライブにより、ネットワークデバイスはセッションをアイドル状態と見なしません。

Linux/Unix/Cygwin OpenSSH修正プログラム
最も簡単な修正はsshクライアントのキープアライブを有効にすることです。この例では60秒ごとにsshキープアライブを送信します。

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

すべてのセッションでこれを有効にしたい場合は、これを/etc/ssh/ssh_configまたは~/.ssh/configに入れます。

ServerAliveInterval 60

詳細は、 ssh_configのマンページ を参照してください。

PuTTY修正

これをあなたのPuTTYの "デフォルト設定"に保存してください...

  • 接続をクリック
  • 「キープアライブ間の秒数」に60と入力します。

PuTTY_screenshot

72
Mike Pennington

Mike Pennigtonの答え に加えて、私はあなたにServerAliveCountMaxも知らせたいと思います。

  • ServerAliveIntervalは、x秒ごとにキープアライブを送信します(デフォルトは 0 です。他に設定されていない場合、この機能は無効になります)。
  • しかしこれはServerAliveCountMax回だけ行われます。 ServerAliveCountMaxのデフォルト値は 3 です( マンページssh_config を参照)。

例:ServerAliveInterval 60 に設定し、ServerAliveCountMaxをそのままにしておくと、キープアライブは接続を3 * 60 = 180 seconds = 3 分だけ存続させます。

これを、例えば接続を2時間有効にしておくと、次のことが可能になります。

コマンドごと:

したがって設定することを検討する必要があります

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

持続的:

永続的にするには、/etc/ssh/ssh_config(システム全体に適用されます)または~/.ssh/config(ユーザーのみに適用されます)に書き込みます。

ServerAliveInterval 60
ServerAliveCountMax 120

また見なさい:

17
Murmel

私はMobaxtermを使っていて、この問題にも出会いました。 Mobaxtermには、クライアントがアイドル状態のときにクライアントを存続させるオプションもあります。 Settings -> Configuration -> SSHに行きます。 SSH settingsというタイトルのセクションがあります。オプションSSH keepaliveを確認してください。それからそれは問題が消えるはずです。

enter image description here

1
jdhao