Проблемы с 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 destination-server], как упомянуто здесь, и смог подключиться. Как настроить ssh на использование шифра по умолчанию? Зачем здесь шифр?


Что происходит с сервером, с которого вы получаете эту ошибку telnet ip.or.name.of.offending.server 22?
MadHatter

1
Кажется, обе стороны думают, что другая сторона закрыла соединение. В этот момент я бы отключил tcpdump или wireshark и запустил его с обоих концов.
Майкл Хэмптон

@MadHatter Я могу telnet на порт 22 и получить ответ SSH.
нитины

Попробуйте скомпилировать предыдущие версии openssh, такие как 6.5p1, чтобы увидеть, связано ли это поведение с изменением кодовой базы?

Ответы:


7

Проблема звучит как ошибка на стороне сервера. Когда клиент отправляет список шифров, сервер openssh, вероятно, ожидает, что сможет прочитать список за один системный вызов.

Если список поддерживаемых шифров длиннее, чем может быть передано в одном пакете, сервер может получить меньше байтов при первом вызове, чем ожидалось. Правильным поведением на сервере будет выполнение другого вызова для получения оставшихся байтов. Но из описания проблемы видно, что сервер вместо этого закрывает соединение, когда он не получил полный список шифров сразу. Когда приходит следующий пакет от клиента, сервер отправит клиенту сброс соединения.

Конфигурирование клиента для использования более короткого списка шифров могло бы обойти эту ошибку. Клиент openssh будет искать список шифров в следующих местах:

  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 для этой проблемы?
user313114

1
@ user313114 Я не искал такого трекера, потому что считаю, что ошибка была исправлена ​​в последних версиях три года назад, когда был написан этот ответ.
Касперд

4

Вы можете указать шифр в конфигурационном файле ssh (/ 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.