Ssh経由で特定のサーバーに接続すると、タイムアウトして端末が「フリーズ」します(入力を受け付けず、切断したり、Ctrl-Cを押したりしてsshプロセスを強制終了することはできません)。
これはUbuntuのgnome-terminal
にありますが、端末の入出力を一時停止しているようで、GNOME端末ソフトウェア自体の動作には影響しません。そのため、gnome-terminal
のバグは、sshとの厄介な矛盾よりも少なくなります。
それで、タイムアウトしたSSH接続から端末を防ぐ/取り戻す方法はありますか?
sshd(サーバー)は、しばらくクライアントから何も聞こえない場合は接続を閉じます。たまにはサーバーにライフオブサイン信号を送信するようにクライアントに指示することができます。
この設定はファイル~/.ssh/config
にあります。 4分ごとにremotehostにシグナルを送信するには、~/.ssh/config
に次のコードを追加してください。
Host remotehost
HostName remotehost.com
ServerAliveInterval 240
これが私の~/.ssh/config
にあります。
すべてのホストに対して有効にするには、次のコマンドを使用します。
Host *
ServerAliveInterval 240
また、chmod 600 ~/.ssh/config
を必ず実行してください。これは、設定ファイルが他の人に読めないようにするためです。
押す Enter、 ~、 . フリーズしたセッションから切断するには、次々とします。
Sshのmanページの "ESCAPE CHARACTERS"セクションで、根本的な詳細が説明されています。
これがあなたの質問に対する直接的な答えではないとしても、それはあなたが抱えている問題と大いに関係があります。接続を維持する(すべての接続が最終的に停止する)代わりに、セッションをバックグラウンドで維持する screen
やtmux
などのターミナルマルチプレクサを使用できます。端末が切断されても.
基本的にSSHサーバにログインするとすぐにscreen
が実行され、新しいセッションが作成されてアタッチされます。
$ screen
それから、あなたは先に進み、通常どおりにシェルを使って作業を行います。接続が切断された場合、オンラインに戻ってSSH経由でサーバーに再接続できると、現在のセッションの一覧が表示されます。
$ screen -ls
セッションに再接続するには:
$ screen -r <session>
<session>
はPIDまたはセッション名です。あなたはあなたのセッションに再接続され、あなたは中断したところから続行することができます!
セッションを切断して自宅から再接続して、中断した時点から再開することもできます。セッションを切断するには、C-a
に続けてC-d
を使用します(that Control + A
そしてControl + D
)。
簡単なオンラインチュートリアル もあります。
リモートサーバーでscreen
とtmux
を使用することはベストプラクティスと見なされ、強くお勧めします。何人かの人々はscreen
を彼らのデフォルトログインシェルと同じくらいまで持っているので、彼らが接続するとき彼らはすぐに新しいscreen
セッションを開始します。
接続文字列に-o ServerAliveInterval=30
を追加してみてください(30
は30秒を意味し、もちろん調整可能です)
SSHサーバー側からアイドルタイムアウト間隔を設定することもできます。
ファイル:/etc/ssh/ssh_config
コンテンツ:
ClientAliveInterval XX
ClientAliveCountMax YY
これはクライアントの設定とまったく同じように機能しますが、クライアントではなくサーバーからnullパケットが送信されます。
から抽出:
http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html
クライアントがそもそもタイムアウトしないようにしたい人のために。
設定ファイルでConnectTimeout 0
を設定しようとすることができます。値0は、接続が閉じられない限り無期限に存続することを意味します。
あなたのconfig(またはssh_config)ファイルはこのようになるでしょう:
Host *
ConnectTimeout 0