如何知道somename我可以访问的某些主机的IP地址ssh?如果我nslookup在此主机上这样做,则说“没有答案”。那怎么ssh解决它的名字呢?
既不/etc/hosts也不.ssh/config解释工作。
编辑
对不起somename,完全合格。
ssh somename.somedomain
工作,而
ping somename.somedomain
和
nslookup somename.somedomain
别
如何知道somename我可以访问的某些主机的IP地址ssh?如果我nslookup在此主机上这样做,则说“没有答案”。那怎么ssh解决它的名字呢?
既不/etc/hosts也不.ssh/config解释工作。
对不起somename,完全合格。
ssh somename.somedomain
工作,而
ping somename.somedomain
和
nslookup somename.somedomain
别
Answers:
Nslookup是用于查询Internet域名服务器的程序。Nslookup对于查询DNS服务器非常有用,但在名称解析方面却无法为您提供全面的信息。
在Linux上,名称解析最常见的是由NSS控制,该功能由配置/etc/nsswitch.conf。具体来说,此配置包含一个hosts条目。例如:
hosts: files dns
在上面的条目中,您可以看到要查询的第一件事files后面是dns,这意味着/etc/hosts将在DNS之前进行查询。存在其他选项,包括LDAP,多播DNS和WINS。
SSH直接回答您的问题,使用NSS(从多个来源中提取结果)将主机名解析为IP地址,其中nslookup仅查询DNS。
您可以查看哪个IP NSS将主机名解析为使用getent。例如解决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
如何知道某台主机的IP地址
somename我可以ssh?
使用详细标志(-vssh命令):
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更多信息。
ssh user@someserver似乎“解析”了someserverDNS名称(即使实际上没有发生)。如果Host someserver在.ssh/config文件中配置了,则即使完全someserver不在DNS中,也可以完全按照OP的状态使用ssh命令。
ssh -v somename包括IP地址(无论任何ssh_config条目)。因此,它直接回答了“如何知道我可以通过SSH传递的某个主机的IP地址?”这个问题,同时也是回答“如何通过ssh的渗透如何起作用……?”的第一步。
菲利普(Philip)快要在那里了,但要出发 .ssh/config您不太可能配置棘道开始。
命令...
getent hosts somename
...使用中的hosts:查询行查询NSS /etc/nsswitch.conf,而不仅仅是DNS nslookup。您的Unix环境可能使用了不止一种命名服务。可能是某种类型的AD集成。
host通常是bind-utils(或同等功能)的一部分,并且两者都一样,nslookup并且dig仅使用DNS。OTOH getent hosts(或可能是ahosts)按照您的描述进行。
host查询其他名称服务。商定这getent hosts是查询“任何已配置名称服务”的最佳方法。
host是每个手册页中唯一的DNS,并通过在我使用的系统(CentOS,Ubuntu,FreeBSD,Solaris)以及上游系统上的测试得到确认。另请参阅我在Q上发表评论的(近)重复。
/etc/hosts或中列出的~/.ssh/config吗?