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.conf
のsearch
行にあり、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
ssh
およびping
などの他のプログラムはglibcリゾルバーを使用してホスト名(この場合は 'pangolin')を検索しますが、Host
はDNSで名前を直接検索し、 glibcリゾルバ。それが違いです。
ただし、マシン上で、dns
の後にfiles
を試行するようにglibcリゾルバーが構成されている場合、Host
が成功した場合にリゾルバーが失敗する理由は説明できません。
以前にdnsmasqがローカル転送ネームサーバー(https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712)として使用されたときに、この動作が報告されたことがありますが、このようなローカルネームサーバーは使用していません。しかし、おそらくそことここの問題はdnsmasqではなく、glibcリゾルバにありました。
あなたのsshはIP6を解決しようとしてタイムアウトするかもしれません。 IP6を使用していない場合は、AddressFamilyをany
からinet
に変更して、/etc/ssh/ssh_config
でIP6を無効にしてみてください。
これは古くからの質問であることは知っていますが、私にとって効果的なものを追加します。
同じ問題があり、nsswitch.conf
には、mdns
とfiles
に加えてdns
がありました。 mdns4
を削除すると、この問題は解決しました。
誤ってネームサーバーの2行の前にドメインエントリの行を置くと、このエラーが発生しました。 nslookupは機能しました。 wgetは働きました。 ssh、scp、rsyncが失敗しました。
ドメインをネームサーバーの下に移動し、resolv.confを保存する問題を修正しました。他に何も必要ありませんでした。
これに何度か出くわしましたが、resolv.confの検索リストに6つのドメイン制限があることを覚えているまで、いつも私をスローします。