ssh_exchange_identification:リモートホストによって閉じられた接続(hosts.denyを使用しない)


74

私は使用していないhosts.allowhosts.deny、Windowsマシン(同じラップトップ、異なるハードドライブ)からさらに多くのSSHが動作しますが、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、同じエラーで終わる多くの自動構成がクライアントで行われることを除いて、同じ結果で構成せずに試されました。


の出力を指定してくださいiptables-save|grep -v '^#'。これには他のテーブルが含まれます(natandなどmangle)。それらが空の場合、単にそれを述べてください。あなたのiptables出力はこれに限定されるもので、デフォルトであるfilterテーブル。また、SSHサーバーで、このような代替ポートでSSHを実行し、デバッグ出力を提供します。
0xC0000022L

@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609dおよびgist.github.com/Torxed/1fd9b5b0c276629caf30およびファイアウォールに関して、SSHはWindowsドライブ(再び、同じラップトップergo MacとIP)で機能しますが、Linuxディスクでは機能しません。
13:07に

さらに2つ。代替ポートでインスタンスに接続する必要があります。そうしないと、考えられる問題を確認できなくなります。WindowsとLinuxのことに関して、それらの1つはおそらくIPv6を使用していますか(ip6tables-save)?
0xC0000022L

@ 0xC0000022Lすみません。私は私がこの問題を受け取った理由> _ <ポート8080でWebキャッシュを実行しているホストに接続するときだポート8080でSSHを実行する。..間違ったIPに接続
Torxed

1
これは、サーバーがブルートフォースsshdを試みるランダムな攻撃者にヒットされている間、断続的に起こりました。ファイアウォールルールを追加して、攻撃者からの接続をドロップすることで修正されました。
アンドリューハウズ14

回答:


61

「外部」要因を除外している場合、通常、次の一連の手順はそれを絞り込むのに役立ちます。したがって、これはあなたの質問に直接答えることはできませんが、エラーの原因を突き止めるのに役立つかもしれません。

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

このような場合に一般的に非常に便利だと思うのは、sshdデーモン化させずに起動することです。私の場合の問題は、意味のあるものも何syslogauth.log示さないことでした。

ターミナルから始めたとき、私は得ました:

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

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

NB:少なくともUbuntuでは、絶対パスの要件$(which sshd)を満たすための最良の方法sshdです。そうしないと、次のエラーが表示されますsshd re-exec requires execution with an absolute path-p 10222なりますがsshd、それが潜在的に実行していると衝突しないように、これは-設定ファイルを上書きし、その代替ポートでリッスンsshdインスタンス。ここで空きポートを選択してください。

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

この方法は、認証の問題やその他の種類の問題を見つけるのに何度も役立ちました。に詳細な出力を取得するにはstdout、を使用します$(which sshd) -Ddddp 10222dd冗長性を高めるために追加されていることに注意してください)。より良いデバッグのデバッグのためにman sshd


私の接続試行のいずれもデバッグ出力に現れていないことを記述..私は間違ったIPに接続されているが、これは私が行くのだ...
Torxed

2
$(which sshd)-Ddp 10222により、問題の原因を最終的に確認できました。本当にありがとう!
キューガ

9

また、SSHセッションをホストするためのプロセスを分岐するためにページに連続メモリを割り当てることができないほど、メモリが非常に断片化されているホストを持つこともできます。

このような場合、次のいずれかのメッセージを取得できます。

ssh_exchange_identification: read: Connection reset by peer

または:

Connection closed by aaa.bbb.ccc.ddd

ホストがどれだけ遠くまで到達するかによって異なります。

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


6

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

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


10
実行sshdされていなかった場合、接続は閉じられませんが拒否されます(試してくださいssh -p someportwithoutsshd localhost)。
アントン14年

4
まあ、私の場合は直接接続ではありませんでした。非リスニングマシンへのリバーストンネルを作成しました。これはsshクライアント接続の出力です。
txomon 14年

1
愚かにも私はsshdを実行していないことを知らないので、openssh-serverをインストールして修正しました
Bryan Estrito

4

このエラーは、サーバーへのsshセッションを超過したことが原因であることがわかりました。ホストが接続しようとしていることがわかり、すべてのクライアントからのすべてのセッションを強制終了しました。すべてのセッションをクリアした後、問題は解決しました。


20
どうやったの?
中止

4
どうやったの?ping
...-knocte

1つの方法はwho、ユーザープロセスを使用して強制終了するオープンセッションを見つけることです。
フラットロン

SSHセッションを殺す方法:unix.stackexchange.com/questions/127571/...
Tejasケール

4

ssh_exchange_identification: read: Connection reset by peerループ内で16以上のsshセッションを開始するスクリプトで問題に遭遇しました。sshdは追いつかないようです。短い睡眠を追加すると私の問題が解決しました:

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

3

または、昨夜、私がやったことをして、/ var / emptyを削除したかもしれません。どうやらそのディレクトリとその許可はsshdの機能に不可欠であり、/etc/init.d/sshd再起動時にディレクトリ を再作成しないため、再起動に失敗し、systemdからは理由がわかりません。

フォアグラウンドでsshdを実行して問題を見つけました。

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

ディレクトリを再構築すると、私の場合の問題は解決しました。

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

Linuxプログラマーへの注意:/var/empty非常に重要なもの...本当に???


ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory。したがって、少なくとも1つのディストリビューションがこれを完全に廃止しました。/etc/init.d/sshdスクリプトを見ると、少なくともDebianでは特権分離ディレクトリが/var/run/sshd存在し、まだ存在しない場合は起動時に作成されるようです。
ロアイマ

2

ssh_exchange_identification: Connection closed by remote hostSSHに接続しようとするとエラーが発生しました。インターネット上のリモートサーバーから一時的にアクセスできるように、ローカルコンピューターのSSHポート22のリモートポート転送を行いました。

実際、起動時にSSHサービスを無効にしたことを思い出せなかったため、エラーが表示されたため、ローカルコンピューターでSSHサービスを開始する必要がありましたsudo service ssh start


1
ありがとう、あなたは私の命を救う。
アルカシィ

0

まず最初に。ホストIPアドレスにtelnetして、ポート22がそのホストで実際にリッスンしている(開いている)かどうかを確認します。

telnet x.x.x.x 22

(そうでない場合は、コンソールケーブルを接続してログインできます)

私の場合、それは機能しておらず、ログインするためにコンソールケーブルを接続しました。ログインすると、5つのVTY回線すべてがそのホスト(Ciscoルーター)でビジーであることがわかりました。

VTY回線を解放するために、そこにかかっていた古い接続をクリアしました。VTY行の下にコマンド「exec-timeout 15」を追加しました。次に、コンソールケーブルを取り外しました。

レッスン:

すべてのデバイスで5〜10分のタイムアウトを設定してください(アクティビティが検出されない場合)。


2
その場合、「接続の確立」に続いて「ピアによる接続のリセット」ではなく、別の回答が暗示するように「接続が拒否されました」
ジェフシャラー

1
telnetを使用可能にする(デーモンがtelnetをリッスンする)ことは非常に重大なセキュリティ上の欠陥であり、sshが優先されるリモートコンソールである主な理由である欠陥です。
Xalorous

telnetクライアントを使用してポート22でsshデーモンをプローブすることは、セキュリティ上の欠陥ではありません。telnetクライアントを使用してポート23でtelnetデーモンに接続することは、セキュリティ上の欠陥です。
ダンアンダーソン

0

私の場合、誤ってソケットプロキシを設定していました(動作していません)。まったく同じssh -vvv出力と空のsshdログを取得しました。


0

エラーssh_exchange_identification: Connection closed by remote hostは、いくつかの未知の理由で発生する可能性があります。Visual Studioコードを使用していたとき。git pullコマンドを使用してリモートリポジトリからプルしようとすると、同じエラーが発生しました。

私はちょうど埋め込まれた、端末を閉じた状態開いたのUbuntuの端末をして、再度引っ張ります。そして成功しました


0

以下とから、CentOS Linux release 7.4.1708 (Core)OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017私が持っていたポートをフィルタリングしていない接続の背後にあります:

ssh_exchange_identification:リモートホストによって閉じられた接続

そして、ラズベリーパイがオフになったことが判明しました!

電源が入っていないホストでは、「ホストへのルートがありません」というエラーが発生すると考えていました。Raspberry PiはISPルーターの背後にあるため、おそらく接続を閉じていたのでしょう。

次に、別のインターネット接続から実験(電源がオフのRaspberry Piへの接続を試みます)を繰り返しましたが、Debian StretchでポートをフィルタリングしていませんでしたがOpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017、今回は予想通りでした:

ホストへのルートがありません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.