为什么 ssh somename 可以工作,而 nslookup somename 却不能呢?

为什么 ssh somename 可以工作,而 nslookup somename 却不能呢?

如何知道somename我可以ssh访问的某个主机的 IP 地址?如果我nslookup在这台主机上这样做,它会说“没有答案”。那么如何ssh解析它的名字呢?


/etc/hosts解释都不起作用.ssh/config


编辑

抱歉somename完全合格。

ssh somename.somedomain

有效,同时

ping somename.somedomain

nslookup somename.somedomain

答案1

Nslookup 是一个查询互联网域名服务器的程序。 Nslookup 对于查询 DNS 服务器非常有用,但在名称解析方面它并不能为您提供全面的信息。

在 Linux 上,名称解析通常由以下命令控制国家安全局这是由配置的/etc/nsswitch.conf。具体来说,该配置包含一个hosts条目。例如:

hosts:          files dns

在上面的条目中,您可以看到第一个要查询的内容后面跟着filesdns这意味着/etc/hosts将在 DNS 之前查询。存在其他选项,包括LDAP,组播 DNS胜利

直接回答您的问题,SSH 使用 NSS(从多个源提取结果)将主机名解析为 IP 地址,其中 nslookup 仅查询 DNS。

您可以使用 getent 检查哪个 IP NSS 将主机名解析为。例如要解决somename

getent hosts somename

对于 SSH,您可以在/etc/ssh/ssh_config和中配置主机特定信息~/.ssh/config。这甚至可以让你为主机名指定 IP 地址,完全跳过名称解析:

以下内容告诉 SSH用于192.168.1.25devdev.example.comSSH 将使用该地址是否这些名称作为不同 IP 的 DNS 名称存在:

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

答案2

如何知道somename我可以ssh访问的某个主机的 IP 地址?

-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查看配置文件:

  1. 命令行选项
  2. 用户的配置文件(~/.ssh/config)
  3. 系统范围的配置文件(/etc/ssh/ssh_config)

其中一个文件可能包含您的主机名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部分以获取更多信息。

答案3

菲利普就快到了,但他却走入了.ssh/config你不太可能配置的老鼠洞。

命令...

getent hosts somename

hosts:...使用中的查找行查询 NSS /etc/nsswitch.conf,而不是像 DNS 那样nslookup。您的 Unix 环境可能正在使用多个命名服务;可能是某种类型的 AD 集成。

相关内容