Как узнать IP-адрес какого-нибудь хоста, на который somename
я могу ssh
? Если я делаю nslookup
на этом хосте, он говорит «нет ответа». Как можно ssh
определить его имя?
Ни /etc/hosts
ни .ssh/config
объяснения не работали.
РЕДАКТИРОВАТЬ
Извините somename
, полностью квалифицирован.
ssh somename.somedomain
работает, пока
ping somename.somedomain
и
nslookup somename.somedomain
не
/etc/hosts
или~/.ssh/config
?somename.local
..local
это специальный домен, зарезервированный для mDNS. Для LLMNR вы можете использовать этот сценарий NMAP.Ответы:
Nslookup - это программа для запроса серверов доменных имен в Интернете . Nslookup очень хорош для запросов к DNS-серверам, но не дает полной картины, когда дело касается разрешения имен.
В Linux разрешение имен чаще всего контролируется NSS, который настраивается с помощью
/etc/nsswitch.conf
. В частности, эта конфигурация содержитhosts
запись. Например:В приведенной выше записи , которую вы можете увидеть , что первое , что нужно быть запрошены в
files
следуетdns
, что означает , что/etc/hosts
будет запрошен перед тем DNS. Существуют и другие варианты, включая LDAP , Multicast DNS и WINS .Отвечая на ваш вопрос напрямую, SSH разрешает имя хоста в IP-адрес, используя NSS (получение результатов из нескольких источников), где nslookup запрашивает только DNS.
Вы можете проверить, какой IP NSS разрешает имя хоста для использования getent. Например, чтобы решить
somename
:Также в случае SSH вы можете настроить информацию о хосте в
/etc/ssh/ssh_config
и~/.ssh/config
. Это даже позволит вам указать IP-адрес для имени хоста, полностью пропуская разрешение имени.Следующее говорит SSH использовать
192.168.1.25
для обоихdev
иdev.example.com
. SSH будет использовать этот адрес независимо от того, существуют ли эти имена как DNS-имена для другого IP:источник
Используйте подробный флаг (
-v
)ssh
команды:Вывод должен содержать, помимо прочего, строку, которая показывает разрешенный IP-адрес сервера, к которому вы подключаетесь:
Наиболее вероятная причина
ssh
разрешения имени узла, котороеnslookup
не может быть, заключается в том, что оно настроено наssh
уровне.Per на
ssh_config(5)
странице руководства , есть три места , гдеssh
смотрит на для конфигурационных файлов:Один из этих файлов может содержать ваше имя хоста
somename
(или соответствующий ему шаблон) в качестве псевдонима другого имени хоста или IP. Например:Пожалуйста, обратитесь к
ssh_config(5)
руководству на странице объясненийHost
иHostName
директив и кPATTERNS
разделу для получения дополнительной информации.источник
ssh user@someserver
кажется, что он «разрешает»someserver
DNS-имя (даже если это на самом деле не происходит). Если файлHost someserver
сконфигурирован в.ssh/config
файле, то можно использовать команду ssh точно в состоянии OP, даже если онsomeserver
вообще отсутствует в DNS.ssh -v somename
включают IP-адрес (независимо от каких-либоssh_config
записей). Таким образом, он напрямую отвечает на вопрос «Как узнать IP-адрес какого-либо хоста, которому я могу использовать ssh?», А также является хорошим первым шагом к ответу «Как может быть, что ssh somename работает ...?».Филип почти там, но направляется вниз по склону,
.ssh/config
который вы вряд ли настроили.Команды ...
... запрашивает NSS, используя
hosts:
строку поиска в/etc/nsswitch.conf
, а не только DNS, как этоnslookup
делает. Вероятно, ваша среда Unix использует более одной службы именования; возможно, какой-то тип интеграции AD.источник
host
обычно является частью bind-utils (или его эквивалентом) и похож на оба,nslookup
иdig
использует только DNS. OTOHgetent hosts
(или, возможно,ahosts
) делает то, что вы описываете.host
запрашивает другие службы имен. Договорились, чтоgetent hosts
это лучший однозначный метод для запроса «любых настроенных служб имен».host
только для DNS для справочных страниц и подтверждено тестированием на системах, которые я использую (CentOS, Ubuntu, FreeBSD, Solaris), а также на апстриме . Также посмотрите (близкие) дупы, которые я прокомментировал, которые также говорят это.