私はsshを使用して別のシステムにログインし、そこからスクリプトを実行して新しいシステムを作成し、いくつかの設定を行いました。約7~8時間ほどかかります。そのため、SSH 接続が切断され、スクリプトの実行に失敗したため、常にタイムアウトが発生します。
これで、SSH接続にこのパラメータを使用します。
ssh -o ServerAliveInterval=60 user@host ....
この SSH は複数回生成されます。問題は、数回のSSH接続後にエラーが発生することです。
too many logins of user
そして、SSH接続はログイン成功後すぐに終了します。
これも同じ行動ですか?サーバー活動間隔、リモートシステムのsshユーザーログインセッションは、ssh操作が終了した後もアクティブのままです。それで、追加のログインが失われるのはなぜですか?
答え1
クライアントの接続が失われてもセッションは維持されないと思います。おそらく、サーバー側のオプションは次のとおりです。
生きているクライアントの最大数
sshd(8) がクライアントからメッセージを受信せずに送信できるクライアントアクティブメッセージの数を設定します。クライアントアクティビティメッセージの送信中にこのしきい値に達すると、sshdはクライアントの接続を切断してセッションを終了します。クライアントアクティビティメッセージの使用はTCPKeepAliveとは大きく異なることに注意してください。クライアントアクティビティメッセージは、偽装できないように暗号化されたチャネルを介して送信されます。 TCPKeepAliveアクティブなTCP keepaliveオプションはなりすまし可能です。クライアント側のアクティブメカニズムは、クライアントまたはサーバーが接続が無効になるタイミングを知る必要がある場合に便利です。
デフォルトは 3 です。 ClientAliveIntervalが15に設定され、ClientAliveCountMaxがデフォルトのままになると、応答しないSSHクライアントは約45秒後に切断されます。
クライアントアクティビティ間隔
クライアントからデータが受信されない場合、sshd(8)は暗号化されたチャネルを介してメッセージを送信してクライアントから応答を要求するタイムアウト間隔(秒単位)を設定します。デフォルト値は 0 です。これは、これらのメッセージがクライアントに送信されないことを意味します。
おそらく問題に対する実際の解決策は、端末マルチプレクサ(screenやtmuxなど)を使用することです。接続が失われても、ログインして実行中のプログラムを維持し続けます。実行中のプログラムの出力を含む、後でいつでも端末に再接続できます。また、これを使用して単一のSSH接続内に複数の端末を持つこともできます。サーバーがSSHセッションを制限しているようなので、これは役に立ちます。あなたは一つを見つけることができます画面紹介はこちらしかし、他のものもたくさんあります。
答え2
ServerAliveInterval
したがって、ssh操作が終了した後でも、sshユーザーログインセッションはリモートシステム上でアクティブになります。これが追加のログイン接続が失われる理由ですか?
習慣。これは、接続を確認し、SSH以下のレベルで自動切断を防ぐために送信されるKeepaliveメッセージです。長期実行スクリプトを起動するには、またはを使用するnohup
必要がありますscreen
。tmux
接続を切断した後もスクリプトは実行され続け、後者の2つの端末を使用すると、既存の端末に再接続できます。
答え3
ServerAliveInterval=60
接続がまだ実行中であるため、有効にした後もこれらのエラーが表示されることがあります。このサーバーへのSSH接続/コマンドモード同時接続累積がサーバー構成で許可されている数を超えています。
接続が消えたため、同時接続数が減り、サーバーはこれに満足していましたが(拒否された接続はありません)、あなたはそうではありませんでした。
最大同時接続数に関するサーバー構成を見つけて、その制限内に維持するか、サーバー管理者と交渉して、あなた(おそらく誰も)の制限を増やします。