SSHがこのホスト名を解決しないのはなぜですか?


12

という名前のネットワーク上のホストにSSHで接続しようとするとstorage、DNS解決エラーが発生します。

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

しかし、ホストでDNSを照会すると、動作します

$ host storage
storage has address 192.168.20.103

hostIPを見つけることはできるが、sshできないのはどうしてですか?


14
あらゆる場所でFQDNを使用する習慣を身に付け始めます。これがこれらの線に沿ってあなたが経験した最初の問題であるなら、あなたは非常に幸運です。これらを追跡するのは非常に困難な場合があり、最後にはなりません。ヒントは次のとおりstorageです。インターネット上のライブトップレベルドメインです。
マイケルハンプトン

192.168.20.103に「ssh」できますか?
IvanGoneKrazy

2
192.168.20.103のホスト名をどこで定義していますか?/ etc / hosts?
孤児

3
FQDNの入力は面倒です。一方、.ssh / configで "storage"を "storage.mydomain.com"にエイリアスすると、非常に便利です。
pjc50

1
@ pjc50入力stoしてTabキーを押します。
マイケルハンプトン

回答:


28

sshそしてhost解決に名前がFQDNでない場合は特に、彼らは、時には異なる結果をもたらすことは驚くべきことではないので、解決名は、完全に異なるパス以下の(したがって、至る所のFQDNを使用するための提案。)

OSとシステム構成については何も言及していないので、Linuxに注目して一般的な内容を維持する必要があります。MacOSの詳細は多少異なり、Windowsはさらに異なりますが、一般的な概念は同じです。

  • hostDNSを照会します。したがって、基本的には/etc/resolv.confそこにリストされているサーバーを調べて照会し、ホスト名がまだ完全に修飾されていない場合はドメイン名を付加します。他のすべてのソースを無視しますが、最近では多くのシステムがローカルキャッシュDNSサーバー(通常dnsmasq)を実行し/etc/hosts、他のDNSサーバーを照会する前に他のソースを読み取ります。host/etc/hosts

  • ssh独自のパスに従います。opensshLinuxでは他の実装とは異なることを説明します。まず、構成ファイル(システム全体およびユーザーごと)で定義されているホストのニックネームを探し、次にのディレクティブで指定された順序で他のソースを検索します。次のようなものだとしましょう:/etc/ssh/ssh_config~/.ssh/confighosts:/etc/nsswitch.conf

    hosts: files dns
    

    つまり/etc/hosts、DNSを調べてから照会します(/etc/resolv.conf再度)。他のソースとしては、廃止さnisれたnetinfoサービス、LDAP、アクティブディレクトリなどがあります。

特定のケースをデバッグするには、実装のパスをたどって、sshどこで動かなくなるかを調べる必要があります。


6
ltrace / straceは、sshが実際にドメインを解決しようとしている方法についてのヒントを与えることができます...そして、OSに最も近い方法で、コマンドラインdnsツールがおそらく使用されます。
rackandboneman

/etc/nsswitch.conf読むように変更するというあなたの推薦はhosts: files dns私のために働いた。おもしろいことに、私は過去数週間、Raspian JessieといくつかのRaspberry Piをセットアップしましたが、すべてこの変更が必要です。
パトリックトゥッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.