Когда я пытаюсь выполнить 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
не может?
domain-name-system
ssh
jldugger
источник
источник
storage
это живой домен верхнего уровня в Интернете.sto
а затем нажимаю клавишу Tab.Ответы:
ssh
иhost
разрешать имена по совершенно разным путям, поэтому неудивительно, что они иногда дают разные результаты, особенно когда разрешаемое имя не является полным доменным именем (отсюда и предложение использовать полные доменные имена везде).Вы ничего не упоминаете о своей ОС и конфигурации вашей системы, поэтому я должен держать это в общих чертах, ориентируясь на 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
. Скажи, что это что-то вроде:это означает: посмотрите
/etc/hosts
и затем запросите DNS (/etc/resolv.conf
снова). Другие возможные источники являются устаревшимиnis
иnetinfo
услуги, LDAP, Active Directory, вы называете их.Чтобы отладить ваш конкретный случай, вы должны следовать по пути, по которому следует ваша реализация,
ssh
и выяснить, где он застрял.источник
/etc/nsswitch.conf
на чтениеhosts: files dns
сработала для меня. В качестве интересного примечания я за последние несколько недель приготовил несколько Raspberry Pis с Raspian Jessie, и все они нуждались в этом изменении.