nslookup somenameが機能しないのに、ssh somenameが機能するのはどうしてですか?


16

somenameできるホストのIPアドレスを知る方法はssh?私が行う場合はnslookup、このホスト上では、「無回答」と言いません。sshその名前をどうやって解決できますか?


説明/etc/hosts.ssh/config機能しませんでした。


編集

申し訳ありませんsomenameが完全に修飾されています。

ssh somename.somedomain

動作しながら

ping somename.somedomain

そして

nslookup somename.somedomain

しないでください


12
/etc/hostsまたはにリストされてい~/.ssh/configますか?
スティーブンキット

1
名前は、mDNS(マルチキャストDNS)またはLLMNR(リンクローカルマルチキャスト名前解決)を使用して解決することもできます。
ヨハンMyréen19年

.ssh / configファイルにエントリがある場合があります
-Tagwint

1
@Dims pingを試すことができますsomename.local.localはmDNS用に予約された特別なドメインです。LLMNRの場合、この NMAPスクリプトを使用できます。
ヨハンMyréen19年

2
@mckenzmいいえ、ありません。
スティーブンキット

回答:


31

Nslookupは、インターネットドメインネームサーバーを照会するプログラムです。NslookupはDNSサーバーへのクエリには非常に適していますが、名前解決に関しては全体像を提供しません。

Linuxでは、名前解決は最も一般的にNSSによって制御され/etc/nsswitch.confます。具体的には、この構成にはhostsエントリが含まれています。例えば:

hosts:          files dns

上記のエントリでは、最初に照会されるもののfiles後にが続きdns/etc/hostsDNSの前に照会されることがわかります。LDAPマルチキャストDNSWINSなどの他のオプションがあります

質問に直接答えると、SSHはNSS(複数のソースから結果を引き出す)を使用してホスト名をIPアドレスに解決します。この場合、nslookupはDNSのみを照会します。

getentを使用してホスト名を解決するIP NSSを確認できます。たとえば、解決するにはsomename

getent hosts somename

また 、SSHの場合、/etc/ssh/ssh_configおよびでホスト固有の情報を設定できます~/.ssh/config。これにより、ホスト名のIPアドレスを指定することもでき、名前解決は完全にスキップされます。

以下は192.168.1.25devとの両方に使用するようにSSHに指示しますdev.example.com。SSHは、これらの名前が異なるIPのDNS名として存在するかどうかにかかわらず、このアドレスを使用します。

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

somenameできるホストのIPアドレスを知る方法はssh

コマンドの冗長フラグ(-v)を使用しますssh

ssh somename -v

出力には、特に、接続しているサーバーの解決されたIPを示す行が含まれている必要があります。

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

このホストでnslookupを実行すると、「応答なし」と表示されます。sshその名前をどうやって解決できますか?

sshホスト名を解決nslookupできない最も可能性の高い原因は、ホスト名がsshレベルで構成されていることです。

マニュアルページごとに、構成ssh_config(5)sshファイルを探す場所は3つあります。

  1. コマンドラインオプション
  2. ユーザーの構成ファイル(〜/ .ssh / config)
  3. システム全体の構成ファイル(/ etc / ssh / ssh_config)

これらのファイルの1つには、somename別のホスト名またはIPのエイリアスとしてホスト名(またはそれに一致するパターン)が含まれている場合があります。例えば:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

参照してくださいssh_config(5)マニュアルページの説明HostHostName指令とのPATTERNS詳細については、セクション。


この答えは、DNSサーバーによるサーバーではない場合でも、ホスト名がどのように認識されるかという質問には答えません。
ヨハンMyréen19年

1
答えはssh user@someserversomeserverDNS名を「解決」しているように見える非常にありそうなシナリオを正しく言及しています(実際に発生しない場合でも)。場合Host someserverに設定されている.ssh/configファイル、あっても、正確にOPの状態としてsshコマンドを使用することが可能であるsomeserverすべてのDNSにありません。
フィッシュ

2
@JohanMyréenからの出力にssh -v somenameは、IPアドレスが含まれます(ssh_configエントリに関係なく)。そのため、「sshを実行できるホストsomenameのIPアドレスを知る方法」という質問に直接回答するとともに、「sshのsomenameが機能することはどうすればよいのでしょうか?」
JigglyNaga

4

フィリップはほとんどそこにいますが、.ssh/configあなたが設定した可能性は低いと思われるネズミ穴に向かいます。

コマンド...

getent hosts somename

... DNSだけでなく、のhosts:ルックアップラインを使用してNSSにクエリを実行します。Unix環境が複数のネームサービスを使用している可能性があります。おそらくある種のAD統合。/etc/nsswitch.confnslookup


3
私はその道を進んだとは言いません。完全を期すために「また」を追加しました。
フィリップクーリング

@PhilipCoulingもちろんですが、「事前」も不完全です。「$ thing vs nsloookup」に関する質問の場合、名前を勝手に解決する方法を示していません。
リッチ

3
Qで既にコメントされているように、host通常はbind-utils(または同等のもの)の一部であり、両方とも同様で、DNSのみnslookupdig使用します。OTOH getent hosts(またはahosts)は、あなたが説明したことを行います。
dave_thompson_085

@ dave_thompson_085間違っています。host他のネームサービスを照会します。getent hosts「構成されたネームサービス」を照会するための最良の明確な方法であることに同意しました。
リッチ

1
hostmanページごとにDNSのみであり、使用しているシステム(CentOS、Ubuntu、FreeBSD、Solaris)およびアップストリームでのテストにより確認されています。Qについてコメントした(近くの)重複も参照してください。
dave_thompson_085
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.