ログイン後すぐに SSH ログインが切断されるのはなぜですか?

ログイン後すぐに SSH ログインが切断されるのはなぜですか?

私はMacBook Air (MacOS 10.14.6)からssh (パスワードなし) 経由でUbuntuマシン (16.04.6) に接続しようとしています。次のようなコマンドを使用しています。

ssh aaa.bbb.ccc.ddd

常に正常に動作し、プロンプトが表示され、リモート マシンで作業を開始できました。

しかし、約 1 週間、ログイン プロセス、新規ユーザー、パスワードの変更、キーの変更、OS のアップグレード、変更など、私が知らないうちに変更を加えているにもかかわらず、これは機能しなくなりました。.profile確認.bashrcしました/etc/hosts.allowが、/etc/hosts.deny何もありませんでした。Ubuntu マシンと Mac を再起動しましたが、変化はありませんでした。

ログインに成功した瞬間にメッセージが表示されます

Last login: ... from www.xxx.yyy.zzz
Connection to aaa.bbb.ccc.ddd closed

何が起こっているのかをデバッグするにはどうすればいいでしょうか?

補遺

確認すると、/var/log/auth.log次のエントリが表示されます。

Oct 16 07:02:38 mac353 systemd-logind[1173]: New session 11 of user alex.
Oct 16 07:02:38 mac353 sshd[11834]: Received disconnect from www.xxx.yyy.zzz port 61437:11: disconnected by user
Oct 16 07:02:38 mac353 sshd[11834]: Disconnected from www.xxx.yyy.zzz port 61437

答え1

Oct 16 07:02:38 mac353 sshd[11834]: Received disconnect from www.xxx.yyy.zzz port 61437:11: disconnected by user

www.xxx.yyy.zzz現在、MacBook Air の IP アドレスは正しいですか?

ネットワーク上に同じ IP アドレスを使用している別のシステムがある可能性があります。通常どおり接続を開始できますが、応答は IP アドレス競合に関与する両方のシステムにランダムに配信されるため、サーバーは送信パケットの一部を再送信する必要がある場合があります。通常、実際に積極的に接続を確立しようとしているシステムの方が応答が速いため、最初の数パケットは問題なく動作しているように見える場合があります。

しかし、最終的に衝突システムのTCP/IPドライバは「このトラフィックは何だ?現在そのようなTCP接続はアクティブではない」と考え、TCPリセットパケットを偽のトラフィックの送信元、つまりサーバーに送り返します。衝突システムのIPアドレスはMacBookと同じなので、サーバーはTCPリセットが実際には接続に属していないことを知る方法がなく、TCPリセットがあなた切断しようとしました。TCP リセット パケットの送信は通常、TCP/IP ドライバー内で優先度の低いジョブであるため、すぐには行われません。

これは IP アドレスの競合の非常に典型的な症状です。

競合しているシステムを見つけるには、ネットワーク スイッチ (管理スイッチの場合) またはローカル ネットワーク セグメントの WiFi AP の MAC アドレス テーブルを調べてみてください。IP アドレスが MacBook に属さない MAC アドレスに関連付けられている場合は、競合しているシステムの MAC アドレスが見つかったことになります。有線ネットワークでは、どのスイッチ ポートがその MAC アドレスを認識したかを確認し、ケーブルのもう一方の端に何があるのか​​を確認します。

管理対象スイッチがない場合、または管理対象スイッチにアクセスできない場合は、自分の IP アドレスに ping を実行して、重複した応答が返されるかどうかを確認してください。または、コマンドarpingライン ツールを使用して ARP パケットで同じ操作を実行することもできます。これにより、ping に応答しないシステムも検出されます。

答え2

この問題の解決策は、まったく異なるコンテキストにインストールされたset -eファイル内の でした。そのファイルの名前を変更した後、ログインが再び機能しました。/etc/profile.dssh

`set -e` 

コマンドにエラーがある場合、スクリプトの実行を停止します(こちらをご覧ください) であり、一部の人々からは悪い習慣だと考えられています。

関連情報