
Я подключаюсь к удаленному серверу через свой Mac уже около месяца. Недавно я попытался подключиться с помощью ssh dylan@MY_IP и получил это сообщение.
ssh_exchange_identification: read: Connection reset by peer
Я также получил некоторую диагностическую информацию...
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to {MY IP{ [MY IP] port 22.
debug1: Connection established.
debug1: identity file /Users/watson/.ssh/id_rsa type -1
debug1: identity file /Users/watson/.ssh/id_rsa-cert type -1
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/watson/.ssh/id_dsa" as a RSA1 public key
debug1: identity file /Users/watson/.ssh/id_dsa type 2
debug1: identity file /Users/watson/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
Проведя небольшое исследование, я попробовал следующее...
- Перезагрузил роутер.
- Очистил файл «known_hosts»
- Удалил мой файл «known_hosts»
- Освобожден и обновлен мой DHCP
- Я также попробовал с другого устройства (Windows) с помощью Putty, но тоже с ошибкой
Обратите внимание, что я не вносил никаких изменений на сервер, чтобы заблокировать это взаимодействие.
Кроме того, я не уверен, вызовет ли это проблемы, но я подключился к нему по доменному имени и по IP-адресу.
Кроме того, мне удалось успешно подключиться с другого IP-адреса.
Я знаю, что это большая проблема, о которой написано много ресурсов, но многие решения не сработали, и я не увидел ни одного способа ее решения.
Обновлять
Я принудительно переключил его на протокол 1. Вместо "Connection reset by peer" теперь получаю "Connection closed by remote host". Запуск с отладочной информацией:
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to MY_IP [MY_IP] port 22.
debug1: Connection established.
debug1: identity file /Users/watson/.ssh/identity type -1
debug1: identity file /Users/watson/.ssh/identity-cert type -1
ssh_exchange_identification: Connection closed by remote host
решение1
Вот как я решил ошибку «ssh_exchange_identification: Connection closed by remote host» при подключении к SSH-серверу.
Я получил эту ошибку при попытке подключения к встроенной машине Linux после распаковки пакета в root. Было заменено множество файлов библиотек, включая libssl.
Попытка подключения:
chetic@ubuntu:~$ ssh -v [email protected]
OpenSSH_6.2p2 Ubuntu-6ubuntu0.3, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to SC [192.168.1.100] port 22.
debug1: Connection established.
debug1: identity file /home/delaval/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/delaval/.ssh/id_rsa-cert type -1
debug1: identity file /home/delaval/.ssh/id_dsa type -1
debug1: identity file /home/delaval/.ssh/id_dsa-cert type -1
debug1: identity file /home/delaval/.ssh/id_ecdsa type -1
debug1: identity file /home/delaval/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2p2 Ubuntu-6ubuntu0.3
ssh_exchange_identification: read: Connection reset by peer
Поиск в Google, похоже, предложил проверить только hosts.deny и hosts.allow, но на моем целевом компьютере таких файлов не было.
После перезагрузки (по совету Картика) sshd не запустился. Я попробовал вручную запустить sshd на target:
# sshd
OpenSSL version mismatch. Built against 1000002f, you have 1000105f
Я заменил /usr/lib/libssl.a оригинальной версией и запустил sshd, и все вернулось на круги своя. Проблема в моем случае была вызвана неправильной версией в пакете, который я изначально распаковал для root.
решение2
Я получал ту же ошибку (но с любой машины, включая проблемную машину через ssh localhost
).
Это началось, когда я перенес профиль пользователя, т. е. после копирования файлов как root, а затем выполнил команды типаchown -R username /Users/username/Destop
в любом случае, совершенно не уверен, почему владелец /var/empty был изменен на имя пользователя, но он ssh
определенно должен /var/empty
принадлежать пользователю root (иначе вы получите ssh_exchange_identification: read: Connection reset by peer
):
sudo chown root /var/empty
решение3
Это не проблема с вашей локальной машиной, а проблема на стороне сервера. Там может бытьмножественные факторывызывающие эту проблему:
- Изменения в конфигурации /etc/hosts.allow или /etc/hosts.deny на удаленном сервере.
- Большая нагрузка на сервер.
Раньше, когда у меня возникали подобные проблемы, я делал одно из двух в следующем порядке:
- Измените /etc/hosts.allow, как указано в статье выше. (и перезапустите сервер SSH)
- Если /etc/hosts.allow уже соответствует требованиям, просто перезапустите SSH-сервер (и будьте осторожны, делая это!)
- Если перезагрузка не помогла, заново сгенерируйте ключи сервера и перезапустите SSH-сервер (это рискованно, так как каждый пользователь, входящий в систему на этой машине, получит сообщение об ошибке, что на сервере изменились ключи).
Чаще всего 1 решает проблему, но в некоторых случаях мне приходилось делать 2. Я не смог понятьпочемуэто так, только это сработало. Возможно, это как-то связано с тем, как представлен ключ, или, возможно, он был каким-то образом поврежден - я не уверен. Но я знаю, что ошибка полностью связана с сервером и тем, как происходит рукопожатие при установке соединения SSH.
решение4
Это, конечно, баг, ssh работает с одной из моих машин, но не с другой. Я решил это, следуйте этим.
- Создайте токен доступа с неограниченным сроком действия и выберите все доступные варианты.
- Удалите существующие ключи SSH.
- Клонируйте репозиторий с https вместо ssh.
- Используйте имя пользователя, но вместо пароля используйте сгенерированный токен доступа.
в качестве альтернативы вы можете установить remote на http, используя эту команду в существующем репозитории, и использовать эту команду git remote set-url originhttps://gitlab.com/[имя пользователя]/[имя-репозитория].git