SSHの問題:ソケットからの読み取りに失敗しました:ピアによる接続のリセット


14

サーバーの1つでOpenSSH_6.6p1をコンパイルしました。アップグレードされたサーバーにSSH経由でログインできます。ただし、これからOpenSSH_6.6p1またはOpenSSH_5.8を実行している他のサーバーに接続することはできません。接続中に、次のようなエラーが表示されます。

Read from socket failed: Connection reset by peer

ログの宛先サーバーで、次のように表示されます。

sshd: fatal: Read from socket failed: Connection reset by peer [preauth]

ここで述べたようにcipher_spec [ssh -c aes128-ctr destination-server]を指定してみて、接続することができました。デフォルトで暗号を使用するようにsshを設定するにはどうすればよいですか?ここで暗号が必要なのはなぜですか?


このエラーが発生したサーバーから、実行するとどうなりますかtelnet ip.or.name.of.offending.server 22
MadHatter 14年

1
両側が接続を閉じたと考えているようです。この時点で、tcpdumpまたはwiresharkを分割し、両端で実行します。
マイケルハンプトン

@MadHatterポート22でtelnetを実行し、SSH応答を取得できます。
ニチン14年

6.5p1のようなopensshの以前のバージョンをコンパイルして、この動作がコードベースの変更によるものかどうかを確認してください。

回答:


7

問題はサーバー側のバグのように聞こえます。クライアントが暗号のリストを送信するとき、opensshサーバーはおそらく、1回のシステムコールでリストを読み取ることができると予想します。

サポートされている暗号のリストが1つのパケットで送信できるよりも長い場合、サーバーは最初の呼び出しで予想よりも少ないバイトを取得する可能性があります。サーバーでの正しい動作は、別の呼び出しを実行して残りのバイトを取得することです。しかし、問題の説明から、サーバーは暗号の完全なリストを一度に取得できなかった場合、代わりに接続を閉じます。クライアントからの次のパケットが到着すると、サーバーはクライアントに接続リセットを送信します。

暗号の短いリストを使用するようにクライアントを構成すると、バグを回避できます。opensshクライアントは、次の場所で暗号のリストを探します。

  1. コマンドラインで-c cipher_specまたは-o Ciphers = cipher_specを使用
  2. 〜/ .ssh / configで、関連するホストセクションまたは最初のホストの前にCiphers cipher_specを指定します。
  3. 〜/ .ssh / configと同じ形式を使用した/ etc / ssh / ssh_config
  4. コンパイル時にクライアントに組み込まれたデフォルトのリスト。

2つの構成ファイルは、それぞれユーザーごとおよびシステム全体の設定です。Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbcエリックが提案したように使用するとうまくいくはずです。


これは、そのバージョンのopensshの既知の欠陥ですか?この問題のopensshバグトラッカーへのリンクはありますか?
user313114

1
@ user313114この回答が書かれた3年前の最新バージョンではバグがすでに修正されていると思われるため、このようなトラッカーは探していません。
カスペルド

4

ssh構成ファイルで暗号を指定できます(/ etc / ssh / ssh_configまたは同様のもの、$ PREFIXなどに依存します)。コマンドラインでsshクライアントに渡すオプションは、ssh(クライアント)構成ファイルで設定できます。

関連する行は次のとおりです(コメントを外してください)。

#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

3

それを修正する私の方法は、それが誰かを助けることを願っています:

# Recreate host keys
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A

# Re-install SSh
sudo apt-get --reinstall install openssh-server openssh-client

値を追加してsshd_configを編集します

add :  MaxAuthTries 3

値のコメントを外してssh_configを編集します

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

0

以下のファイル許可を600に変更することにより、この問題を解決しました。

/ etc / ssh / ssh_host_dsa_key
/ etc / ssh / ssh_host_rsa_key
/ etc / ssh / ssh_host_ecdsa_key

また、「/ etc / ssh /」内の他のすべてのファイルのアクセス許可を644に変更しました。すべてのファイルファイルは「root」が所有する必要があります。

以下は、「/ etc / ssh」ディレクトリの下のすべてのファイルに適切な権限を割り当てるためのコマンドの完全なセットです。

chown root:root / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / etc / ssh / ssh_host_dsa_key
chmod 600 / etc / ssh / ssh_host_rsa_key
chmod 600 / etc / ssh / ssh_host_ecdsa_key


-1

表示されているのとまったく同じ症状が発生した私の問題は、ホストキーの切り捨てによるものでした。それらを再作成してみてください:

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