web-dev-qa-db-ja.com

ホストはホスト名を解決できますが、sshはそうではありません

SSH経由で10.04システムから12.04システムに接続しようとしています。奇妙なことに、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/etc/resolv.confsearch行にあり、Hostを使用すると、これらのルールに従って名前が適切に検索されます。ただし、SSHクライアントsshを使用すると、上記のエラーが表示されます。どうすればいいの?私は、resolv.confの名前解決ルールがsystem-globalに適用されるという印象を常に受け​​ていました。

注:/etc/hostsは名前pangolinをまったく宣言していません。パッケージopenssh-serverは、ターゲットマシンで構成されます。問題は、これら2つのプログラム間で名前解決が一貫していない理由だけです。

別の注意:完全修飾ドメイン名、つまり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(12.04のresolv.confのソース):

# 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
14
0xC0000022L

sshおよびpingなどの他のプログラムはglibcリゾルバーを使用してホスト名(この場合は 'pangolin')を検索しますが、HostはDNSで名前を直接検索し、 glibcリゾルバ。それが違いです。

ただし、マシン上で、dnsの後にfilesを試行するようにglibcリゾルバーが構成されている場合、Hostが成功した場合にリゾルバーが失敗する理由は説明できません。

以前にdnsmasqがローカル転送ネームサーバー(https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712)として使用されたときに、この動作が報告されたことがありますが、このようなローカルネームサーバーは使用していません。しかし、おそらくそことここの問題はdnsmasqではなく、glibcリゾルバにありました。

12
jdthood

あなたのsshはIP6を解決しようとしてタイムアウトするかもしれません。 IP6を使用していない場合は、AddressFamilyをanyからinetに変更して、/etc/ssh/ssh_configでIP6を無効にしてみてください。

9

これは古くからの質問であることは知っていますが、私にとって効果的なものを追加します。

同じ問題があり、nsswitch.confには、mdnsfilesに加えてdnsがありました。 mdns4を削除すると、この問題は解決しました。

3
J Hart

誤ってネームサーバーの2行の前にドメインエントリの行を置くと、このエラーが発生しました。 nslookupは機能しました。 wgetは働きました。 ssh、scp、rsyncが失敗しました。

ドメインをネームサーバーの下に移動し、resolv.confを保存する問題を修正しました。他に何も必要ありませんでした。

3
Louy

これに何度か出くわしましたが、resolv.confの検索リストに6つのドメイン制限があることを覚えているまで、いつも私をスローします。

3
golights