ssh_exchange_identification: リモート ホストによって接続が閉じられました (hosts.deny は使用されていません)

ssh_exchange_identification: リモート ホストによって接続が閉じられました (hosts.deny は使用されていません)

私はないhosts.allowまたは を使用するとhosts.deny、さらに SSH は Windows マシン (同じラップトップ、異なるハード ドライブ) からは機能しますが、Linux マシンからは機能しません。

ssh -vvv root@host -p port与える:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

Windows マシンではすべて正常に動作するため、セキュリティ ログを確認したところ、そこに含まれる行は同一であり、サーバーは 2 つの異なる「マシン」を区別なく扱い、公開キー認証によって両方とも許可されています。

つまり、これは私のローカル ArchLinux ラップトップの問題であるに違いないという結論に至りますが、一体何なのでしょうか?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

だからそれは問題ではないのです...

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

ファイアウォール設定との競合はありません (現時点では)。

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

権限は問題ないようです (サーバー上でも同じ)。また、構成せずに試してみましたが、/etc/ssh/ssh_configクライアントで多くの自動構成が行われ、同じエラーが発生する以外は同じ結果になりました。

答え1

元々は Ask Ubuntu に投稿されました

「外部」要因を除外した場合、通常は次の手順で原因を絞り込むことができます。これは質問への直接的な回答ではありませんが、エラーの原因を突き止めるのに役立つ可能性があります。

トラブルシューティングsshd

このような場合に一般的に非常に役立つと思うのは、sshdデーモン化せずに開始することです。私の場合の問題は、どちらもsyslog意味auth.logのあることを何も示さなかったことです。

ターミナルから起動すると、次のようになりました:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

ずっと良くなりました! このエラー メッセージにより、何が問題なのかを確認して修正することができました。どちらのログ ファイルにもこの出力は含まれていませんでした。

注意:少なくとも Ubuntu では、絶対パスの要件$(which sshd)を満たすには が最善の方法です。そうしないと、次のエラーが発生します: 。 は、構成ファイルを上書きして代替ポートを listen します。これは、実行中のインスタンスと競合しないようにするためです。ここでは、必ず空いているポートを選択してください。sshdsshd re-exec requires execution with an absolute path-p 10222sshdsshd

最後に、代替ポート(ssh -p 10222 user@server)に接続します。

この方法は、認証の問題であろうと他の種類の問題であろうと、問題を見つけるのに何度も役立ちました。 に非常に詳細な出力を取得するにはstdout、 を使用します$(which sshd) -Ddddp 10222(詳細度を上げるために が追加されていることに注意してくださいdd)。デバッグをさらに強化するには、 を確認してくださいman sshd


sshdこの方法の主な利点は、構成を確認できることです。それなしsshdデフォルト ポートで再起動する必要があります。通常はこれは既存の SSH 接続に干渉しないはずですが、私はそれを見たことがあります。そのため、これにより、リモート サーバーへのアクセスを切断する前に (場合によっては) 構成ファイルを検証できます (たとえば、一部の VPS や、マシンへの帯域外アクセスを取得するために追加料金を支払う必要がある物理サーバーでもこれを使用しています)。

答え2

また、メモリがひどく断片化されていて、SSH セッションをホストするためのプロセスをフォークするための連続したメモリにページを割り当てることができないホストが存在する可能性もあります。

このような場合、次のいずれかのメッセージが表示されます。

ssh_exchange_identification: read: Connection reset by peer

または:

Connection closed by aaa.bbb.ccc.ddd

ホストが脱出する前にどの程度まで進むかによって異なります。

メモリの断片化が原因であることが明らかな場合、解決策としては、他の手段でサーバーにアクセスし、関連するサービスのいくつかを再起動することです。VM にはスワップ パーティションがないため、VM では Apache と MySQL が原因であることがわかっています。それができない場合は、ホストを再起動します。

答え3

念のため、これは私に起こったことです。ホストで sshd が実行されていることを確認してください。

それは愚かな失敗ですが、本当にあなたの問題かもしれません。

答え4

16以上のsshセッションをループで開始するスクリプトでこの問題に遭遇しましたssh_exchange_identification: read: Connection reset by peer。どうやらsshdは追いつけないようです。短いスリープ(明らかに回避策... :D 反対票を投じた人たちが私の問題を解決してくれました:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done

関連情報