SSHセッションを維持する[終了]


240

ssh -p8520 username@remote_hostリモートサーバーへのログインに使用します。

発行

職場にいるときは常に接続されており、適切に機能します。残念ながら、自宅からリモートサーバーに接続してから10〜15分後に端末がフリーズします。

コンソールにエラー/タイムアウトレポートはありませんが、カーソルはこれ以上移動できません。

wログインユーザーをチェックするために入ると、ゾンビのログインユーザーがいます。手動で殺す必要があります。

これは非常に迷惑です。誰か助けてもらえますか?


私もこれを持っていて、使い始めましたscreen。多分これはある種のタイムアウトの問題です。
火曜日2014

@martin screenは、プログラムの実行を維持するのに役立ちます。残念ながら、リモートサーバーで作業する必要がある場合があります:(
Haifeng Zhang

パラメータなしで起動すると、シェルが作成されます。
火曜日2014

あなたの言っていることscreenだけですか?接続が失われる問題を解決できますか?違うscreen -S screenName?私はいつもと画面を使用-Sして-r
ハイフォン張

1
いいえ、これで問題が解決することはありません。ターミナルで作業を失うことを避けるだけです。何もしなくてもフリーズします。始めたところから再開できます。つまり、を使用していつでも再開できる端末を作成できますscreen。あなたはすでにそれを知っているようです;)
martin '

回答:


448

サーバー側で実行されるsshデーモン(sshd)は、クライアントがサイレントになる(つまり、情報を送信しない)場合、サーバー側からの接続を閉じます。接続が失われないようにするには、sshクライアントに、サインオブライフ信号をときどきサーバーに送信するように指示します。

この構成はファイル$HOME/.ssh/configにあります。ファイルが存在しない場合は作成します(構成ファイルは誰でも読み取り可能であってはならないためchmod 600 ~/.ssh/config、ファイルの作成後に実行してください)。たとえば4分(240秒)ごとに信号をリモートホストに送信するには、構成ファイルに次のように記述します。

Host remotehost
    HostName remotehost.com
    ServerAliveInterval 240

すべてのホストに対してキープアライブ信号の送信を有効にするには、構成ファイルに次の内容を配置します。

Host *
    ServerAliveInterval 240

24
@ user271996、クライアント側の設定でデーモンを再起動する必要があるのはなぜですか?
maxschlepzig

構成は、ユーザーが書き込み可能でなければなりません。読みやすさは問題ではありません。アクセス許可レベルとして600を使用しても問題ありません。これは、ユーザーが書き込みのみが可能なためです。
jbruni

1

5
私は常に設定名について混乱します:ServerAliveInterval サーバーがを使用している間、クライアントはを使用しますClientAliveInterval 。なんてめちゃくちゃ。
youkaichao

@youkaichaoしばしばこの混乱があります。APIデザイナーとして、私がそれを両方の方法で置くかもしれない理由があります。結局のところ、最も重要なのは、選択した標準の優れたドキュメントです。
Cameron Tacklind

170

一度だけの解決策が欲しかった:

ssh -o ServerAliveInterval=60 myname@myhost.com

エイリアスに保存:

alias sshprod='ssh -v -o ServerAliveInterval=60 myname@myhost.com'

これで次のように接続できます:

me@MyMachine:~$ sshprod

12
これはすばらしいことですが、「1回限りの解決策」ではありません。あなたが複数回サーバーに接続するつもりなら、なぜないHost *ServerAliveInterval 240(またはあなただけのためにそれをしたい場合は、ホスト名を指定しますmyname@myhost.com。?エイリアスを設定すると、どのような方法で簡単に思われないrockymonkey555の答えのように
Lambart

8
それとも、単にあなたに〜/ .bashrcのエイリアスを作成しますalias ssh='ssh -o ServerAliveInterval=60'
ジャバ

15
彼は「1回しか機能しない」のように「1回だけ」を意味し、「1回書くだけでよい」ではありません。
Jonathan Hartley

1
はい、「1回限り」を「1回限りの使用」と読んだ場合、これは完全に機能します。
フィラジ

あなたは、「ワンライナー」セットすることを望む場合ServerAliveInterval60、偉大な。ただし、bashエイリアスを使用している可能性がある場合でも、それは.ssh/configばかげています。
Cameron Tacklind

50

不思議に思う人のために、@ edward-coast

サーバーのキープアライブを設定する場合は、これを/etc/ssh/sshd_config次の行に追加します

ClientAliveInterval 60
ClientAliveCountMax 2

ClientAliveInterval:タイムアウト間隔を秒単位で設定します。その後、クライアントからデータが受信されない場合、sshd(8)は暗号化されたチャネルを介してメッセージを送信し、クライアントからの応答を要求します。

ClientAliveCountMax:sshd(8)がクライアントからメッセージを受信せずに送信できるクライアントアライブメッセージ(下記参照)の数を設定します。クライアントアライブメッセージの送信中にこのしきい値に達すると、sshdはクライアントを切断し、セッションを終了します。


ClientAliveIntervalのような「パラメーター」はなく、ServerAliveIntervalだけのようです。マニュアルページ「man ssh_config」で確認できます
dtj

6
これは間違っています。「man sshd_config」で、クライアント構成ではなく、sshデーモンを実行しているサーバー部分を探してください。
ジェフダベンポート

ClientAliveIntervalサーバーを使用してクライアントが生きているかどうかを確認するために使用する必要がありますか、それともクライアントにServerAliveInterval繰り返しサーバーに「ping」を実行させる必要がありますか?どちらも意味がないようです
qrtLs 2017年

1
ClientAliveInterval応答しないデッド接続でサーバーを切断する場合にのみサーバーでを設定し、発生する頻度とタイミングをカスタマイズできます。
ジェフダベンポート2017


10

以下のグローバル設定を行うことで、ssh接続を維持できます

次の行を/etc/ssh/ssh_configファイルに追加します。

ServerAliveInterval 60

それはクライアントでのみ機能しますか、それともsshdでも機能しますか?
エドワードコースト

1
@EdwardCoastクライアントマシンで動作します。私はMacでテストしました
minhas23 '21
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.