Назад | Перейти на главную страницу

Проблемы SSH: ошибка чтения из сокета: сброс соединения одноранговым узлом

Я скомпилировал 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 для использования шифра по умолчанию? Зачем здесь нужен шифр?

Проблема выглядит как ошибка на стороне сервера. Когда клиент отправляет список шифров, сервер 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 как предложил Эрик, должно работать нормально.

Вы можете указать шифр в файле конфигурации ssh (/ etc / ssh / ssh_config или аналогичный, зависит от $ PREFIX и т. Д.). Любую опцию, которую вы передаете ssh-клиенту в командной строке, можно установить в конфигурационном файле ssh (client).

Вот соответствующая строка (просто раскомментируйте):

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

Мой путь чтобы исправить это, надеюсь, это кому-то поможет:

# 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

Решил эту проблему, изменив права доступа к файлу ниже на 600.

/ и т. д. / ssh / ssh_host_dsa_key
/ и т. д. / ssh / ssh_host_rsa_key
/ и т. д. / ssh / ssh_host_ecdsa_key

Также изменено разрешение для всех других файлов внутри '/ etc / ssh /' на 644. Все файлы-файлы должны принадлежать 'root'.

Ниже приведен полный набор команд для назначения надлежащих разрешений всем файлам в каталоге / etc / ssh:

корень chown: корень / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / и т. д. / ssh / ssh_host_dsa_key
chmod 600 / и т. д. / ssh / ssh_host_rsa_key
chmod 600 / и т. д. / ssh / ssh_host_ecdsa_key

Моя проблема, которая имела те же симптомы, что и вы, была связана с усеченными ключами хоста. Попробуйте воссоздать их с помощью:

sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A