Проблеми з SSH: Не вдалося прочитати з розетки: з’єднання скидається одноранговим


14

Я склав 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-сервер призначення], як згадувалося тут, і зміг підключитися. Як можна налаштувати ssh для використання шифру за замовчуванням? Чому тут потрібен шифр?


Що з сервера, з якого ви отримуєте цю помилку, що відбувається, коли ви робите telnet ip.or.name.of.offending.server 22?
MadHatter

1
Обидві сторони, здається, думають, що інша сторона закрила зв'язок. У цей момент я вирвав би tcpdump або wireshark і запустив би його з обох кінців.
Майкл Хемптон

@MadHatter Я можу телефонувати на порт 22 і отримати відповідь SSH.
нітини

Спробуйте скласти попередні версії openssh, як 6.5p1, щоб побачити, чи не пов’язана така поведінка зі зміною бази коду?

Відповіді:


7

Проблема звучить як помилка на стороні сервера. Коли клієнт надсилає список шифрів, сервер opensh, ймовірно, розраховує, що зможе прочитати список у єдиному системному виклику.

Якщо список підтримуваних шифрів довший, ніж можна передавати в одному пакеті, сервер може отримати менше байтів у першому дзвінку, ніж очікувалося. Правильною поведінкою на сервері було б виконати ще один дзвінок, щоб отримати решту байтів. Але з опису проблеми, який з'являється, сервер замість цього закриває з'єднання, коли не отримав одразу повний список шифрів. Коли прийде наступний пакет від клієнта, сервер надішле скидання з'єднання клієнту.

Налаштування клієнта на використання більш короткого списку шифрів може призвести до помилки. Клієнт opensh шукає список шифрів у таких місцях:

  1. У командному рядку використовуйте або -c cipher_spec або -o Ciphers = cipher_spec
  2. У ~ / .ssh / config, вказавши Ciphers cipher_spec у відповідному розділі хоста або перед першим хостом.
  3. В / etc / ssh / ssh_config використовуючи той же формат, що і ~ / .ssh / config
  4. Список за замовчуванням, вбудований у клієнт під час компіляції.

Два файли конфігурації - це відповідно налаштування кожного користувача та загальної системи. Використання, Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbcяк запропонував Ерік, має працювати добре.


Це вада знань у цій версії openssh? чи є у когось посилання на openssh bug-tracker для цього питання?
користувач313114

1
@ user313114 Я не шукав жодного такого трекера, тому що я вважаю, що помилка вже була виправлена ​​в останніх версіях три роки тому, коли ця відповідь була написана.
kasperd

4

Ви можете вказати шифр у файлі ssh config (/ etc / ssh / ssh_config або подібному, залежить від $ PREFIX тощо). Будь-який варіант, який ви передаєте клієнту ssh у командному рядку, можна встановити у файлі конфігурації ssh (client).

Ось відповідний рядок (лише коментар):

#   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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.