Вопрос или проблема
Я struggle испытываю трудности с диагностикой ошибки ssh, которую я вижу только при попытке подключиться с одной конкретной машины (клиент A) к другой конкретной машине (сервер).
Ping работает, поэтому я вижу сервер в сети и могу достичь его с клиента A.
ping <адрес ip сервера>
Когда я пытаюсь выполнить ssh, я получаю следующие два сообщения об ошибках. (Первое при первой попытке, второе сообщение при любых последующих попытках.)
Соединение закрыто с <адрес ip сервера> порт 22
Получено отключение от <адрес ip сервера> порт 22:2: Слишком много неудачных попыток аутентификации
Отключено от <адрес ip сервера> порт 22
Когда я проверяю логи на сервере, я не вижу никаких указаний на то, что соединение вообще было инициализировано (клиентом) и отклонено (хостом).
Тем не менее, я могу выполнить ssh на другую машину (клиент B) с клиента A, а затем выполнить ssh на сервер с клиента B. Этот вход появляется в логах сервера.
Я не уверен, как диагностировать это дальше. Что-то явно блокируется или теряется, но мне не ясно, где именно в сети или как это определить.
Когда я запускаю следующее с клиента A:
ssh -vvv <пользователь>@<адрес ip сервера>
Я получаю следующий вывод:
OpenSSH_9.2p1 Debian-2+deb12u3, OpenSSL 3.0.14 4 Jun 2024
debug1: Чтение конфигурационных данных /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config строка 19: include /etc/ssh/ssh_config.d/*.conf не соответствует ни одному файлу
debug1: /etc/ssh/ssh_config строка 21: Применение параметров для *
debug2: resolve_canonicalize: имя хоста <адрес ip сервера> является адресом
debug3: расширенный UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/<пользователь>/.ssh/known_hosts'
debug3: расширенный UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/<пользователь>/.ssh/known_hosts2'
debug3: ssh_connect_direct: вход
debug1: Подключение к <адрес ip сервера> [<адрес ip сервера>] порт 22.
debug3: set_sock_tos: установка сокета 3 IP_TOS 0x10
debug1: Соединение установлено.
debug1: файл идентичности /home/<пользователь>/.ssh/id_rsa тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_rsa-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ecdsa тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ecdsa-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ecdsa_sk тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ecdsa_sk-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ed25519 тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ed25519-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ed25519_sk тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_ed25519_sk-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_xmss тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_xmss-cert тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_dsa тип -1
debug1: файл идентичности /home/<пользователь>/.ssh/id_dsa-cert тип -1
debug1: Локальная строка версии SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u3
debug1: Удаленная версия протокола 2.0, удаленная версия программного обеспечения OpenSSH_8.4p1 Debian-5+deb11u3
debug1: compat_banner: совпадение: OpenSSH_8.4p1 Debian-5+deb11u3 pat OpenSSH* compat 0x04000000
debug2: fd 3 установка O_NONBLOCK
debug1: Аутентификация к <адрес ip сервера>:22 как '<пользователь>'
debug3: record_hostkey: найден тип ключа ED25519 в файле /home/<пользователь>/.ssh/known_hosts:1
debug3: load_hostkeys_file: загружено 1 ключей из <адрес ip сервера>
debug1: load_hostkeys: fopen /home/<пользователь>/.ssh/known_hosts2: Нет такого файла или директории
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: Нет такого файла или директории
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: Нет такого файла или директории
debug3: order_hostkeyalgs: есть соответствующий ключ предпочтения [email protected], используя HostkeyAlgorithms verbatim
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT отправлено
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT получено
debug2: локальная клиентская KEXINIT предложение
debug2: KEX алгоритмы: [email protected],curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,ext-info-c,[email protected]
debug2: алгоритмы ключей хоста: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],rsa-sha2-512,rsa-sha2-256
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: сжатие ctos: none,[email protected],zlib
debug2: сжатие stoc: none,[email protected],zlib
debug2: языки ctos:
debug2: языки stoc:
debug2: first_kex_follows 0
debug2: зарезервировано 0
debug2: peer server KEXINIT предложение
debug2: KEX алгоритмы: [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256,[email protected]
debug2: алгоритмы ключей хоста: ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256
debug2: шифры ctos: [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
debug2: шифры stoc: [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
debug2: MACs ctos: [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
debug2: MACs stoc: [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
debug2: сжатие ctos: none,[email protected]
debug2: сжатие stoc: none,[email protected]
debug2: языки ctos:
debug2: языки stoc:
debug2: first_kex_follows 0
debug2: зарезервировано 0
debug3: kex_choose_conf: будет использовать строгий порядок KEX
debug1: kex: алгоритм: [email protected]
debug1: kex: алгоритм ключа хоста: ssh-ed25519
debug1: kex: сервер->клиент шифр: [email protected] MAC: <неявный> сжатие: none
debug1: kex: клиент->сервер шифр: [email protected] MAC: <неявный> сжатие: none
debug3: send packet: type 30
debug1: ожидание SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: SSH2_MSG_KEX_ECDH_REPLY получено
debug1: Ключ хоста сервера: ssh-ed25519 SHA256:<ключ сервера>
debug3: record_hostkey: найден тип ключа ED25519 в файле /home/<пользователь>/.ssh/known_hosts:1
debug3: load_hostkeys_file: загружено 1 ключей из <адрес ip сервера>
debug1: load_hostkeys: fopen /home/<пользователь>/.ssh/known_hosts2: Нет такого файла или директории
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: Нет такого файла или директории
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: Нет такого файла или директории
debug1: Хост '<адрес ip сервера>' известен и соответствует ключу хоста ED25519.
debug1: Найден ключ в /home/<пользователь>/.ssh/known_hosts:1
debug3: send packet: type 21
debug1: ssh_packet_send2_wrapped: сброс последовательности отправки 3
debug2: ssh_set_newkeys: режим 1
debug1: новое шифрование после 134217728 блоков
debug1: SSH2_MSG_NEWKEYS отправлено
debug1: ожидание SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: ssh_packet_read_poll2: сброс последовательности чтения 3
debug1: SSH2_MSG_NEWKEYS получено
debug2: ssh_set_newkeys: режим 0
debug1: новое шифрование после 134217728 блоков
debug3: ssh_get_authentication_socket_path: путь '/run/user/1000/keyring/ssh'
debug1: get_agent_identities: привязанный агент к ключу хоста
debug1: get_agent_identities: ssh_fetch_identitylist: агент не содержит идентичностей
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_rsa
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_ecdsa
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_ecdsa_sk
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_ed25519
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_ed25519_sk
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_xmss
debug1: Будет попытка ключа: /home/<пользователь>/.ssh/id_dsa
debug2: pubkey_prepare: завершено
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: Получено SSH2_MSG_EXT_INFO
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,[email protected],ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected]>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: Получено SSH2_MSG_SERVICE_ACCEPT
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Аутентификации, которые могут продолжаться: publickey,password
debug3: начать заново, прошел другой список publickey,password
debug3: предпочтительный gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: остаточные предпочтения: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Следующий метод аутентификации: publickey
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_rsa
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_rsa: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_ecdsa
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_ecdsa: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_ecdsa_sk
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_ecdsa_sk: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_ed25519
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_ed25519: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_ed25519_sk
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_ed25519_sk: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_xmss
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_xmss: Нет такого файла или директории
debug1: Попытка частного ключа: /home/<пользователь>/.ssh/id_dsa
debug3: такой идентичности нет: /home/<пользователь>/.ssh/id_dsa: Нет такого файла или директории
debug2: мы не отправили пакет, отключить метод
debug3: authmethod_lookup password
debug3: остаточные предпочтения: ,password
debug3: authmethod_is_enabled password
debug1: Следующий метод аутентификации: password
<пользователь>@<адрес ip сервера>'s пароль:
debug3: send packet: type 50
debug2: мы отправили пакет пароля, ждем ответа
debug3: receive packet: type 1
Получено отключение от <адрес ip сервера> порт 22:2: Слишком много неудачных попыток аутентификации
Отключено от <адрес ip сервера> порт 22
Ответ или решение
Диагностика проблемы SSH между клиентом и сервером
Ваша ситуация с невозможностью установить соединение SSH между конкретным клиентом (клиент A) и сервером представляет собой распространённую проблему, которая может быть вызвана несколькими факторами. Давайте разберёмся с этой задачей и предложим методологию для её диагностики и решения.
1. Анализ ошибок
Вы упомянули об ошибках, возникающих при попытке SSH-соединения:
- Connection closed by
port 22 - Received disconnect from
port 22:2: Too many authentication failures
Вторая ошибка указывает на то, что клиент A, вероятно, пытается использовать слишком много (более 10) аутентификационных методов, что ведёт к отключению со стороны сервера. Это будет полезным сцеплением при диагностике проблемы.
2. Проверка конфигурации клиента
a. SSH-ключи
Из вывода команды ssh -vvv <user>@<server ip address>
видно, что не находится ни один из SSH-ключей (все type -1
). Если клиент A использует SSH-агент, убедитесь, что необходимые ключи добавлены в агент:
ssh-add ~/.ssh/id_rsa
Если ключи не настроены, рекомендуется создать новый ключ и добавить его на сервер. Используйте:
ssh-keygen -t rsa -b 4096 -C "<your_email@example.com>"
Не забудьте скопировать публичный ключ на сервер:
ssh-copy-id <user>@<server ip address>
b. Конфигурация SSH-клиента
Убедитесь, что в файле /etc/ssh/ssh_config
и ~/.ssh/config
нет специфических параметров, которые могут ограничивать количество аутентификационных попыток. Вы можете добавить следующие строки, чтобы явно ограничить число попыток:
Host <server ip address>
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa
3. Проверка серверной конфигурации
a. Логирование
Поскольку у вас в логах сервера нет упоминаний о попытках входа, проверьте настройки сервера SSH, чтобы убедиться, что он правильно регистрирует события:
sudo nano /etc/ssh/sshd_config
Убедитесь, что:
LogLevel VERBOSE
— настройки логирования установлены на уровень подробного логирования;MaxAuthTries
не установлено на слишком низкое значение (по умолчанию 6).
После внесения изменений перезапустите службу SSH:
sudo systemctl restart ssh
b. Ограничения по IP
Убедитесь, что сервер не блокирует клиент A по IP. Проверьте файрвол или настройки безопасности в файле /etc/hosts.allow
или /etc/hosts.deny
, чтобы убедиться, что IP-адрес клиента не включён в список блокировки.
4. Проблемы с сетевыми настройками
Хотя вы можете пинговать сервер, могут существовать ограничения на уровне сети, такие как:
- Проблемы с маршрутизацией,
- Список контроля доступа (ACL) на сетевом оборудовании,
- Прокси-серверы или сетевого программного обеспечения, которые могут блокировать соединение.
Проверьте настройки вашего сетевого оборудования или всякие прокси.
5. Тестирование
Проверяйте соединения по одному:
- Попробуйте SSH-соединение с другого устройства в той же сети, чтобы исключить проблемы с сетью.
- Используйте утилиты
telnet
илиnmap
, чтобы убедиться, что порт 22 (SSH) открыт и доступен с клиента A:
telnet <server ip address> 22
Или
nmap -p 22 <server ip address>
6. Выводы
Для решения проблемы с SSH между клиентом A и сервером необходимо учитывать конфигурацию как клиента, так и сервера, а также сетевую инфраструктуру. Убедитесь, что ключи SSH настроены должным образом, конфигурации файлов верны, и нет сетевых ограничений. После устранения замеченных проблем, вы должны будете восстановить возможность SSH-подключения.
Соблюдение этих шагов поможет вам устранить ошибку и обеспечить надежное SSH-соединение между вашими машинами.