хост може вирішити ім'я хоста, 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застосовуються в системі global.

Примітка. /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.confу 12.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

@Awi: додав його плюс ще трохи.
0xC0000022L

Два питання 1) Чи працює вона за призначенням, якщо ви використовуєте fqdn? 2) Чи можете ви розмістити вміст ~ / .ssh / config та / etc / ssh / ssh_config, щоб побачити, чи є якісь дивні явища.
Патрік Реган

@PatrickRegan: Я відредагую запитані матеріали у питанні. Так, це працює з fqdn :) ... (також налаштувати питання з цього приводу)
0xC0000022L

@STATUS_ACCESS_DENIED: Ви бачите щось дивне mtr pangolin?
pl1nk

Відповіді:


12

В той час, як sshта інші програми, наприклад, pingвикористовуючи резолюцію glibc для пошуку імені хоста (у цьому випадку "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.
месс

3

Я стикався з цим кілька разів, і це завжди кидає мене, поки я не згадаю про шість обмежень домену в списку пошуку в разрешен.conf.


1. Це дуже хороший момент. Текст запитання містить перелік файлу resoluv.conf (хоча, здається, він був відредагований для анонімізації інформації). Рядок файлу searchмістить більше шести доменних імен. Резолютор glibc розглядає лише перші шість доменів або 256 символів, залежно від того, що менше. Я припускаю, що hostутиліта не має такого обмеження, і це hostвдається вирішити ім'я за допомогою сьомого чи пізнішого розширення доменного імені.
jdthood

Зауважте також, що в / etc / network / інтерфейсах не повинно бути і dns-searchлінія, і dns-domainлінія в одній строфі. Цей dns-domainваріант фактично застарів; всі доменні імена пошуку повинні бути вказані в dns-searchрядку.
jdthood

3

Я отримав цю помилку, випадково поставивши рядок введення домену перед 2 рядками серверів імен. nslookup працював. wget працював. ssh, scp, rsync не вдалося.

переміщення домену нижче серверів імен та збереження резолюції.conf виправлено. нічого іншого мені не було потрібно.


3

Я знаю, що це давнє питання, але я додам те, що працювало на мене.

У мене було те саме питання, і я виявив, що в моєму nsswitch.conf, mdnsкрім filesі dns. Видалення mdns4вирішило цю проблему для мене.


працював і для мене - ubuntu 16.04
Buddy Palumbo

-1

У мене виникли проблеми з доступом до мого sftp-сервера. Користувач ftp не зміг увійти до sftp з іншого сервера. (Solaris - відкриває). Я прокоментував запис "dns" у nsswitch.conf і проблему вирішено.

Дякую Арун Джанардханан (IBS Software Services)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.