SSHがしばらくアイドル状態だった場合にSSHが切断されるのを防ぐ方法


51

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

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

明確にするために:ログイン後に一度開始するソリューションを探しています。その後、その端末を使用して、立ち去り、2時間後に戻ってきて、何も入力せずに立ち去ります。また、私はトンネルのものを探していません(そのために素晴らしいツールshuttleをお勧めします)

何か案は?


明確な画面とKeepaliveを作成するための簡単なメモは同じものではありません:たとえば、sshクライアントまたはサーバーgestが切断されると、KeepAliveがオンになっていても、sshセッションは終了しますが、画面シェルは終了しません。
MariusMatutiae 14年

回答:


78

明確にするために:ログイン後に一度開始するソリューションを探しています。その後、その端末を使用して、立ち去り、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の「デフォルト設定」に保存します...

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

putty_screenshot


21

マイク・ペニグトンの答えに加えて、私ServerAliveCountMaxもあなたに知らせたいです。

  • ServerAliveIntervalx秒ごとに(デフォルトはキープアライブ送信します0何か他のものに設定されていない場合は、この機能を無効にし、)。
  • ServerAliveCountMax応答が受信されない場合、これは何度も行われます。のデフォルト値ServerAliveCountMax3ですマンページssh_config参照)。

例:60に設定ServerAliveIntervalしてそのままにした場合、キープアライブは終了するまで3分間しか待機しません。ServerAliveCountMax3 * 60 = 180 seconds =

これを、たとえば接続を維持するための2時間に増やすには、次のようにします。

コマンドごと:

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

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

持続的:

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

ServerAliveInterval 60
ServerAliveCountMax 120

注意

以下のようdislickが正しく指摘し、これはあなたの状況に応じて、必要ではないかもしれないもの:

  • サーバーが応答しなくなったらすぐにセッションをすぐに終了する場合は、の値を低くする必要がありますServerAliveCountMax
  • すでに確立された接続を維持することに関心がある場合(たとえば、電車で行くと待ち時間が長い場合)、接続の再確立を試行し続けるServerAliveCountMaxことができるようsshに、より高い値を選択する必要があります。

こちらもご覧ください:


1
すみませんが、これは間違っています。ServerAliveCountMaxサーバーから返されるメッセージ受信せずに送信できるサーバーアライブメッセージの量を指定します。あなたがしたい場合はssh、それがフリーズした後、(あなたがそれを再起動することができるように)の出口にあなたが実際に設定する必要がありますServerAliveCountMax低い数。リンクされているマンページ OPを参照してください。
9:09にディリック

@dislickこれについて少し考えなければなりませんでしたが、コンテキストに応じて正しいと思うので、コンテキストを強調するメモを追加しました。
マーメル

2

私はMobaxtermを使用していますが、この問題にも遭遇しています。Mobaxtermには、クライアントがアイドル状態のときにクライアントを存続させるオプションも付属しています。に進みSettings -> Configuration -> SSHます。というタイトルのセクションがありSSH settings、オプションを確認してくださいSSH keepalive。その後、問題は解消されます。

ここに画像の説明を入力してください


無料版で「SSHキープアライブ」は機能しますか
samshers

はい、動作します。問題には他の原因がある可能性があります。
jdhao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.