#Как распознать проблему и где применимы действия
SSH работает при подключении напрямую к IP-адресу, но ошибается при имени узла. Причина обычно в DNS, неверном алиасе клиента, записи IPv6 или адресе в known_hosts. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.
#Возможные причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не разрешается имя | getent не возвращает IP либо ssh пишет Could not resolve hostname | Исправить DNS, адрес и поиск по домену |
| Имя указывает не на тот сервер | ssh -G и getent показывают неожиданный адрес | Сверить DNS A/AAAA и ~/.ssh/config |
| Проблема только при IPv6 | Имя содержит AAAA, но маршрута IPv6 нет | Проверить -4 как диагностический обход, затем исправить IPv6 |
#Пошаговая диагностика и исправление
- Шаг 1. Зафиксируйте вывод при подключении по имениКоманда выполняется на клиенте. Посмотрите Connecting to ... [адрес] и точную ошибку. Не меняйте known_hosts при несоответствии ключа, пока не подтвердите сервер через независимый канал.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -vv -o ConnectTimeout=8 пользователь@server.example.org
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
getent ahosts server.example.org - Шаг 2. Проверьте результат DNS через системуgetent ahosts использует привычный системе механизм разрешения имён. Если адрес пуст, исправляйте DNS и имя сервера, а не sshd_config.
- Шаг 3. Проверьте применяемые настройки SSHssh -G показывает hostname, port, user и proxyjump из клиентской конфигурации. Если там другое имя, исправьте алиас в ~/.ssh/config, а не публичный DNS.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -G server.example.org | grep -Ei '^(hostname|port|user|proxyjump) '
- Шаг 4. Сравните IPv4 и IPv6На клиенте принудительно проверьте только IPv4. Если -4 работает, а обычная команда зависает, диагностику продолжайте с AAAA/IPv6-маршрутом; не удаляйте AAAA запись без подтверждения владельца домена.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -4 -o ConnectTimeout=8 пользователь@server.example.org
- Шаг 5. Проверьте сетевые адреса интерфейсаКоманда показывает маршруты клиента, полезно если IPv6 выбран, но шлюза нет. Наличие маршрута не гарантирует, что сервер доступен на другом конце.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ip -4 routeip -6 route
- Шаг 6. Проверьте клиентские правила именованияЕсли IP и DNS совпадают, а ssh использует не тот адрес, просмотрите /etc/hosts и ~/.ssh/config. Не копируйте найденные строки в публичный чат, они могут содержать внутренние IP и имена.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
grep -n 'server.example.org' /etc/hosts ~/.ssh/config 2>/dev/null || true
#Как проверить, что проблема действительно устранена
После исправления повторите вход по имени и сравните IP из ssh -vv с ожидаемым. Если возникает Host key verification failed, сначала независимо подтвердите отпечаток сервера, не удаляйте known_hosts автоматически.
#Если результат не получен
Вернитесь к самому раннему отличающемуся результату диагностики и проверьте точный текст ошибки, текущую загрузку и фактическую версию программы. Не повторяйте опасную команду с другими правами наугад. Если это рабочий сервер, передайте администратору обезличенные отрывки журнала за момент сбоя и уже выполненные действия.