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


14

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.tldsearch行に/etc/resolv.confありhost、名前を使用すると、それらのルールが与えられれば適切に検索されます。ただし、SSHクライアントsshでは、上記のエラーが表示されます。どうすればいいの?名前解決規則がresolv.confsystem-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

...および12.04 /etc/network/interfacesのソース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

1
あなた/etc/resolv.confとこのコマンドの出力を投稿してもらえますgrep host /etc/nsswitch.confか?
Awi

@Awi:それに加えて、もう少し。
0xC0000022L

2つの質問1)fqdnを使用すると、意図したとおりに機能しますか?2)〜/ .ssh / configおよび/ etc / ssh / ssh_configの内容を投稿して、奇妙な点がないか確認してください。
パトリックリーガン

@PatrickRegan:要求されたものを質問に編集します。はい、それは(もその点で疑問を調整します)... FQDN :)で動作します
0xC0000022L

@STATUS_ACCESS_DENIED:何かおかしいと思われますmtr pangolinか?
pl1nk

回答:


12

一方ssh、そのように他のプログラムping(この場合は「センザンコウ」)ホスト名をルックアップするために使用するglibcのリゾルバは、hostglibcのリゾルバをバイパスし、直接DNSで名前を検索します。それが違いです。

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

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


深く簡潔な答え。行く方法!ありがとう。
0xC0000022L

9

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


これは私のために働いた、ありがとう!サポートされているipv6に接続しようとした他のすべてのサーバーは既にサポートされているため、以前は気が付きませんでした。
mniess

3

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


1.これは非常に良い点です。質問テキストには、resolv.confファイルのリストが含まれています(ただし、情報を匿名化するために編集されているようです)。ファイルのsearch行には、6つ以上のドメイン名が含まれています。glibcリゾルバーは、最初の6つのドメインまたは256文字のいずれか少ない方のみを調べます。hostユーティリティにはそのような制限はなくhost、7番目以降のドメイン名拡張で名前を解決することに成功すると推測します。
jdthood

また、/ etc / network / interfacesの単一のスタンザにdns-search行と行の両方があるべきではないことに注意してくださいdns-domain。このdns-domainオプションは実際には非推奨です。すべての検索ドメイン名を指定する必要がありdns-searchます。
jdthood

3

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

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


3

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

私は同じ問題を持っていたし、私の中にいることを見つけnsswitch.conf、そこにいたmdnsに加えて、filesdns。削除すると、mdns4この問題は解決しました。


あまりにも私のために働いた-のUbuntu 16.04
バディ・パルンボ

-1

sftpサーバーへのアクセスで問題が発生しました。ftpユーザーは、別のサーバーからsftpにログインできませんでした。(Solaris-openssh)。nsswitch.confの「dns」エントリにコメントし、問題を解決しました。

ありがとう、Arun Janardhanan(IBS Software Services)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.