web-dev-qa-db-ja.com

正常にシャットダウンしないと、SSH多重化がハングする

多重化を使用してSSH経由で自宅のコンピューターへのリモートアクセスを設定しようとしています。セットアップは次のとおりです。ラップトップから、モデムのポートに接続します。このポートはルーターに転送され、ルーターはローカルデスクトップに転送し、キーで認証します。多重化により、再認証せずにホームボックスへの他の接続を開くことができます。これはすべて、私が期待するとおりに機能します。

ただし、ラップトップを再起動すると問題が発生します。再起動すると、ホームボックスにSSHで接続できなくなります。再起動しようとすると、認証を求められずに少しハングし、最終的にタイムアウトになります。

ホームボックスを再起動することで問題を解決できます(ただし、物理的な存在が必要であり、ポイントが失われます)。 ssh -O exit $IP -p $PORTを使用してSSH接続を正常に切断すれば、問題のトリガーを回避することもできます。

上記を踏まえて、2つの質問があります。1つは、これは意図された動作ですか、それともバグに遭遇したかです。そして、第二に、この問題を回避する方法はありますか?ありがとう!

(この質問は表面的には SSH多重タイムアウト構成 に似ていますが、その質問はサーバーの再起動/到達不能に関するものですが、私の質問はクライアントの再起動に関するものです多重化接続の終了を適切に通知することなく。)

[[〜#〜] edit [〜#〜]]以下のコメントで要求されているように、これは(あまり役に立たない)試みの出力です。 -vvフラグで接続します。 IP、ユーザー名、ポートをそれぞれ$IP、$ USER, and $ PORT`に置き換えて、出力を少し編集しました。

OpenSSH_8.1p1, LibreSSL 3.0.2
debug1: Reading configuration data /home/$USER/.ssh/config
debug1: /home/$USER/.ssh/config line 4: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolve_canonicalize: hostname $IP is address
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/$USER/.ssh/$USER@$IP:$PORT" does not exist
debug2: ssh_connect_direct
debug1: Connecting to $IP [$IP] port $PORT.
debug1: connect to address $IP port $PORT: Connection timed out
ssh: connect to Host $IP port $PORT: Connection timed out

このバグをトリガーしない場合(したがって、can正常に接続できます)、-vvの出力は、Connection timed outを除いてまったく同じです。行はdebug1: Connection establishedを示す行に置き換えられ、接続は通常どおり認証に進みます。

関連する場合に備えて、これが私の非常に基本的な.ssh/configファイルの全体です。

Host *
    ControlMaster auto
    ControlPath   ~/.ssh/%r@%h:%p
    ControlPersist yes
    ServerAliveInterval 300
    ServerAliveCountMax 2
    RemoteForward 9999 localhost:22
1
codesections

これをもう少し掘り下げて(そしてexcellentSSH Mastery を読んだ後)、問題を解決することができました: client.ssh/configファイルにServerAliveIntervalを設定しましたが、serverClientAliveIntervalを設定していませんでした。 sshd_configファイル。

その結果、serverはタイムアウトせず、接続を維持していました。ホームネットワークをナビゲートするために必要なダブルポートフォワーディングと組み合わせて、これは私が開いた(唯一の)ポートを占有し、追加の接続を妨げていました。

ClientAliveInterval 10ファイルにsshd_config行を追加すると(そしてSudo pkill -1 sshdでsshdサービスを再起動することを忘れないでください。問題はうまく解決します。この情報が、他の人がこの問題をすばやく解決するのに役立つことを願っています。

2
codesections