如何知道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
?
使用详细标志(-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
更多信息。
ssh user@someserver
似乎“解析”了someserver
DNS名称(即使实际上没有发生)。如果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
吗?