![为什么 ssh somename 可以工作,而 nslookup somename 却不能呢?](https://linux22.com/image/153085/%E4%B8%BA%E4%BB%80%E4%B9%88%20ssh%20somename%20%E5%8F%AF%E4%BB%A5%E5%B7%A5%E4%BD%9C%EF%BC%8C%E8%80%8C%20nslookup%20somename%20%E5%8D%B4%E4%B8%8D%E8%83%BD%E5%91%A2%EF%BC%9F.png)
如何知道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
在上面的条目中,您可以看到第一个要查询的内容后面跟着files
,dns
这意味着/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.25
和dev
。dev.example.com
SSH 将使用该地址是否这些名称作为不同 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
查看配置文件:
- 命令行选项
- 用户的配置文件(~/.ssh/config)
- 系统范围的配置文件(/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)
手册页说明Host
和HostName
指令以及参考资料PATTERNS
部分以获取更多信息。
答案3
菲利普就快到了,但他却走入了.ssh/config
你不太可能配置的老鼠洞。
命令...
getent hosts somename
hosts:
...使用中的查找行查询 NSS /etc/nsswitch.conf
,而不是像 DNS 那样nslookup
。您的 Unix 环境可能正在使用多个命名服务;可能是某种类型的 AD 集成。