Чому SSH не вирішує це ім'я хоста?


12

Коли я намагаюся 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не може?


14
Почніть звикати користуватися FQDN скрізь. Якщо це перша проблема, з якою у вас виникли ці питання, вам надзвичайно пощастило. Вони можуть бути справді волохатими, і це не буде вашим останнім. Ось підказка: storageце живий домен верхнього рівня в Інтернеті.
Майкл Хемптон

Чи можете ви "ssh" на 192.168.20.103?
IvanGoneKrazy

2
Де ви визначили ім'я хоста 192.168.20.103? / тощо / господарі?
сироти

3
Введення FQDN - це біль. З іншого боку, "зберігання" на "storage.mydomain.com" у .ssh / config дуже зручно.
pjc50

1
@ pjc50 Я набираю stoта натискаю Tab.
Майкл Хемптон

Відповіді:


28

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та /etc/resolv.confповторіть запит на DNS ( ще раз). Інші можливі джерела - застарілі nisта netinfoсервіси, LDAP, активний каталог, ви їх називаєте.

Щоб налагодити ваш конкретний випадок, вам слід пройти шлях, яким рухається ваше впровадження, sshі з’ясувати, де він застряє.


6
ltrace / strace може дати вам підказки про те, як ssh насправді намагається вирішити домен ... і найближчий до того, як це робиться, командний рядок інструмент dns, ймовірно, гетен.
rackandboneman

Ваша рекомендація щодо зміни /etc/nsswitch.confчитання hosts: files dnsпрацювала на мене. Як цікаву сторону, за останні кілька тижнів я створив кілька Raspberry Pis з Raspian Jessie, і всі вони потребували цієї зміни.
Патрік Туччі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.