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

Почему SSH не разрешает это имя хоста?

Когда я пытаюсь подключиться по SSH к хосту в сети с именем storage, Я получаю ошибку разрешения DNS:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

Но когда я запрашиваю DNS с хостом, он работает

$ host storage
storage has address 192.168.20.103

Как это host могу найти IP, но ssh не может?

ssh и host разрешать имена по совершенно разным путям, поэтому неудивительно, что они иногда дают разные результаты, особенно когда имя для разрешения не является FQDN (отсюда и предложение использовать FQDN везде).

Вы ничего не упоминаете о своей ОС и конфигурации вашей системы, поэтому я должен оставить все в общих чертах с учетом Linux: детали MacOS несколько отличаются, а Windows даже больше, но общие концепции те же.

  • host запрашивает DNS, поэтому в основном он смотрит в /etc/resolv.conf и запрашивает перечисленные там серверы, возможно, присоединяя доменное имя, если имя хоста еще не полностью определено. Он игнорирует все возможные источники, но имейте в виду, что в наши дни многие системы используют локальный кэширующий DNS-сервер (обычно dnsmasq) который читается /etc/hosts и другие источники, прежде чем запрашивать другие DNS-серверы, поэтому, если host запрашивает этот локальный сервер, результаты /etc/hosts может закрасться.

  • ssh идет своим путем. Я опишу что openssh работает под Linux, другие реализации отличаются. Сначала он ищет никнеймы хостов определены в файлах конфигурации (общесистемные /etc/ssh/ssh_config и на пользователя ~/.ssh/config), затем он ищет другие источники в порядке, указанном hosts: директива в /etc/nsswitch.conf. Скажите, что это что-то вроде:

    hosts: files dns
    

    это означает: заглянуть /etc/hosts а затем запросите DNS (/etc/resolv.conf очередной раз). Другие возможные источники - устаревшие nis и netinfo службы, LDAP, активный каталог, вы называете их.

Чтобы отладить ваш конкретный случай, вы должны следовать по пути реализации ssh следует и узнайте, где он застревает.