怎么可能 ssh somename 有效,而 nslookup somename 无效?

Dim*_*ims 16 ssh nslookup host-name-resolution

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


/etc/hosts没有.ssh/config解释也没有奏效。


编辑

对不起somename是完全合格的。

ssh somename.somedomain
Run Code Online (Sandbox Code Playgroud)

工作,而

ping somename.somedomain
Run Code Online (Sandbox Code Playgroud)

nslookup somename.somedomain
Run Code Online (Sandbox Code Playgroud)

Phi*_*ing 32

Nslookup 是一个查询 Internet 域名服务器的程序。Nslookup 非常适合查询 DNS 服务器,但在名称解析方面它并没有为您提供全貌。

在 Linux 上,名称解析最常由NSS控制,它由/etc/nsswitch.conf. 具体来说,此配置包含一个hosts条目。例如:

hosts:          files dns
Run Code Online (Sandbox Code Playgroud)

在上面的条目中,您可以看到首先要查询的内容files后面是dns,表示/etc/hosts将在 DNS 之前查询。存在其他选项,包括LDAP多播 DNSWINS

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

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

getent hosts somename
Run Code Online (Sandbox Code Playgroud)

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

以下内容告诉 SSH192.168.1.25用于devdev.example.com. 无论这些名称是否存在,SSH 都将使用此地址作为不同 IP 的 DNS 名称:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25
Run Code Online (Sandbox Code Playgroud)


Jul*_*mur 10

如何知道somename我可以知道的某些主机的 IP 地址ssh

使用命令的详细标志 ( -v) ssh

ssh somename -v
Run Code Online (Sandbox Code Playgroud)

除其他外,输出应包含一行显示您正在连接的服务器的已解析 IP:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.
Run Code Online (Sandbox Code Playgroud)

如果我在该主机上执行 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
Run Code Online (Sandbox Code Playgroud)

请参阅ssh_config(5)手册页解释HostHostName指令以及PATTERNS有关更多信息的部分。

  • @JohanMyréen `ssh -v somename` 的输出包括 IP 地址(不管任何 `ssh_config` 条目)。因此,它直接回答了“如何知道我可以通过 ssh 连接到的某个主机 somename 的 IP 地址?”的问题,并且是回答“ssh somename 怎么会起作用...?”的良好第一步。 (2认同)