host может разрешить имя хоста, ssh - нет


14

Я пытаюсь подключиться из системы 10.04 к системе 12.04 через SSH. Как ни странно, правила, resolv.confкажется, вступают в силу только выборочно, что вызывает у меня недоумение. Заметим:

[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12

subdomain.domain.tldнаходится на searchлинии в /etc/resolv.confи использование hostимени правильно искать с учетом этих правил. Однако, с клиентом SSH sshя получаю ошибку, воспроизведенную выше. Как это может быть? У меня всегда складывалось впечатление, что правила разрешения имен resolv.confприменяются системно-глобально.

Примечание: имя /etc/hostsне объявляется pangolinвообще. Пакет openssh-serverнастроен на целевой машине. Вопрос только в том, почему разрешение имен не согласовано между этими двумя программами.

Еще одно замечание: тонкая команда работает , когда я ввожу имя домена полностью квалифицированное, т.е. pangolin.subdomain.domain.tld.

Тем временем я перезагрузил клиентскую машину (10.04), и проблема все еще существует. Демон кэширования DNS не установлен, поэтому я считаю, что это не должно было быть проблемой в любом случае.


Информация, запрошенная в комментарии:

$ grep host /etc/nsswitch.conf
hosts:          files dns

/etc/resolv.confЯ преобразовал доменные имена последовательно:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com

... и полная /etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

... и /etc/network/interfaces, который является источником для resolv.conf12.04:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.1.234
        netmask 255.255.0.0
        gateway 172.16.255.254
        dns-nameservers 172.16.1.1 172.16.1.5
        dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
        dns-domain subdomain.domain1.com.

Примечание: преобразование доменных имен было выполнено sed, поэтому оно согласовано между различными воспроизводимыми файлами.


Нет ~/.ssh/config, но вот глобальный ( /etc/ssh/ssh_config), сжатый ради краткости:

$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no

$ mtr pangolin
Name or service not known: Success

1
Не могли бы вы опубликовать свой /etc/resolv.confи вывод этой команды grep host /etc/nsswitch.conf?
Ави

@Awi: добавил, плюс еще немного.
0xC0000022L

Два вопроса 1) Работает ли это как задумано, если вы используете fqdn? 2) Можете ли вы опубликовать содержимое ~ / .ssh / config и / etc / ssh / ssh_config, чтобы увидеть, есть ли какие-то странности.
Патрик Риган

@PatrickRegan: Я отредактирую запрошенный материал в вопросе. Да, это работает с fqdn :) ... (также отрегулирует вопрос в этом отношении)
0xC0000022L

@STATUS_ACCESS_DENIED: Вы видите что-то странное с mtr pangolin?
pl1nk

Ответы:


12

Принимая во внимание, что sshдругие программы, такие как pinggolbc resolver для поиска имени хоста (в данном случае «pangolin»), hostищут имя в DNS напрямую, минуя распознаватель glibc. В этом разница.

Однако, учитывая , что Glibc Резольвер на вашей машине, сконфигурированный , чтобы попробовать dnsпосле files, я не могу объяснить , почему распознаватель не удается , где hostуспешно.

Я встречал такое поведение раньше, когда dnsmasq использовался в качестве локального сервера пересылки имен (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712), но вы не используете такой локальный сервер имен; но, возможно, проблема там и здесь была не в dnsmasq, а в решателе glibc.


Глубокий и краткий ответ. Путь! Благодарю.
0xC0000022L

9

Ваш SSH может попытаться разрешить IP6 и тайм-аут, делая это. Если вы не используете IP6, попробуйте отключить IP6 /etc/ssh/ssh_config, изменив AddressFamily с anyна inet.


Это сработало для меня, спасибо! Я не заметил раньше, потому что все остальные серверы, которые я пытался подключиться к поддерживаемому ipv6 уже.
mniess

3

Я сталкивался с этим пару раз, и это всегда бросало меня, пока я не вспомнил ограничение шести доменов в списке поиска в resolv.conf.


1. Это очень хороший момент. Текст вопроса включает в себя список файла resolv.conf (хотя, похоже, он был отредактирован для анонимизации информации). searchСтрока файла содержит более шести доменных имен. Средство распознавания glibc просматривает только первые шесть доменов или 256 символов, в зависимости от того, что меньше. Я предполагаю, что hostутилита не имеет таких ограничений, и что ей hostудается разрешить имя с седьмым или более поздним расширением имени домена.
Jdthood

Также обратите внимание, что в / etc / network / interfaces не должно быть ни dns-searchстроки, ни dns-domainстроки в одном разделе. Эта dns-domainопция фактически устарела; все поисковые доменные имена должны быть указаны на dns-searchлинии.
Jdthood

3

я получил эту ошибку, поставив строку входа в домен перед 2 строк nameserver случайно. nslookup работал. Wget работал. ssh, scp, rsync не удалось.

исправлено перемещение домена на серверы имен ниже и сохранение resolv.conf мне больше ничего не нужно было


3

Я знаю, что это древний вопрос, но я добавлю, что сработало для меня.

У меня была такая же проблема, и я обнаружил, что по моему nsswitch.conf, mdnsв дополнение к filesи dns. Удаление mdns4решило эту проблему для меня.


работал для меня тоже - Ubuntu 16.04
Buddy Palumbo

-1

Я столкнулся с проблемой доступа к моему серверу sftp. Пользователь ftp не смог войти в sftp с другого сервера. (Солярис - Опенссш). Я прокомментировал запись «dns» в nsswitch.conf, и проблема была решена.

Спасибо Арун Джанардханан (IBS Software Services)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.