OS XターミナルでSSHセッションがハングするのを防ぐにはどうすればよいですか?


101

ターミナルでアクティブなSSHセッションでMacBook閉じてから起動すると、プロンプトが応答しなくなります。

約5分で言う

Write failed: Broken pipe

そして終了します。

これは、約15分以内にターミナルで何も入力しない場合にも発生します。

OS Xに以下を強制できますか?

  1. 可能な限り長い時間SSH接続を維持する
  2. 応答しなくなったらすぐに殺す

回答:


121

接続を維持するために/etc/ssh/ssh_config、それが言う行をチェックしてServerAliveInterval、接続を維持するためにコンピューターがヌルパケットを送信する頻度(秒単位)を確認できます。そこに0があり、コンピューターが接続を維持しようとしていない(無効になっている)場合は、前述のパケットを送信する頻度(秒単位)を示します。120または240を入力してみてください。まだ接続が切断されている場合は、5に下げることができます。その数が発生しない場合は、おそらくルーターがメモリを解放するために接続をダンプしています。

ハングアップしたときにそれを殺すには、sshエスケープ文字を使用できます:

~.

つまり、チルダを押してからピリオドを押し、それが機能しない場合は、それを押す前にEnterを押すと、すぐに接続が切断されます。


3
OK、接続を終了できます~.、すばらしいヒントです!しかし、実際には何をしますか?
いとこコカイン14

私は天気をしたかについて混乱していた唯一の事は私がSSHDを再起動する必要がありましたが、ちょうどセッションを終了し、再接続がトリックでしたかのように思える
dgig

しばしば〜。数分間はうまくいきません。何故ですか?
スリダールサルノバ

2
の場所ssh_config/etc/ssh/ssh_configMac OS Xです。自分で回答を編集しますが、このサイトには十分な担当者がいません。
エリックB

これをクライアントまたはサーバーに配置する必要がありますか?私はクライアントだと思いますが、より明確にすることができます。
-EralpB

23

あなたはできる:

すべての接続に対してシステム全体でシステムを構成します:/ etc / ssh / ssh_configを編集して 、次の行を追加します。

ServerAliveInterval 10

または、サーバーごとに〜/ .ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

これは基本的に、キープアライブパケットを10秒ごとに送信します...


9

また、素晴らしいmoshプロジェクトを使用することもできます。ネットワーク損失、スリープ状態になるマシンなどを適切に処理し、ネットワークが再び機能するようになったときに接続を正常に復元します。

もう1つのより古くからあるソリューションは、リモートマシンでtmuxを使用することです。その場合、まだパイプが破損している可能性がありますが、シェルを再接続すると、アプリケーションはそのままの状態で待機します。


実際、それはまさに私が今やっていることです。
ダン

5

ここでのさまざまな答えは、構成ファイルへの正確なパスに関して矛盾しています。ユニックスごとに異なるのでしょうか?システムのマニュアルページを読むことをお勧めします!

男のssh(1) 、テキストを検索:configと。私のシステムでは、システム全体またはこのユーザーの構成ファイルのいずれかを選択できます(パスは奇妙に異なります)。

では男性はssh_config(5) 、テキストを検索:生きています。私のシステムでは、ServerAliveIntervalServerAliveCountMaxの両方を設定する必要があるようです。

macOS 10.12 Sierraで機能したのは、〜/ .ssh / configに次の2行を追加することです。

ServerAliveInterval 20
ServerAliveCountMax 180

これで、Ubuntu 16.04サーバーへのsshを、切断せずに20 * 180秒= 1時間実行できます。私の一日を作りました!


3

スリープまたはwifiの中断後にsshを自動的に再接続する

  1. MacPortsまたはHomebrewからautosshをインストールします。brew install autossh

  2. ターミナルを開いて実行する autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. WiFiを切断するか、Macをスリープ状態にします。

  4. wifiに再接続すると、sshセッションが自動的に再接続されます。


ログイン後に自動的にssh

Jon Staceyは、ログイン時にsshセッションを自動的にアクティブにすることに関するブログ投稿を書きました。

  1. MacPortsまたはHomebrewからautosshをインストールします。brew install autossh

  2. bashスクリプトを使用してAutomatorワークフローを作成します。

Automatorシェルスクリプト

  1. [ システム環境設定]のログイン項目に移動します

システム環境設定>ログイン項目

  1. Automatorワークフローログインアイテムに追加します。

ログイン項目


1

次の2行を追加し/etc/ssh/ssh_configます。

ServerAliveInterval 60
TCPKeepAlive yes

1

この問題を解決したばかりで、次の行をに追加し$HOME/.ssh/configます。

Host *
  ServerAliveInterval 120
  TCPKeepAlive no

設定TCPKeepAlive noにより、クライアントは、ユーザーリクエストによって別の方法で証明されるまで、接続がまだ良好であると仮定するように指示されます。

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