Когда я пытаюсь подключиться по 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
следует и узнайте, где он застревает.