当 ~/.ssh/config 主机名和 /etc/hosts 发生冲突时,优先考虑什么?

当 ~/.ssh/config 主机名和 /etc/hosts 发生冲突时,优先考虑什么?

如果一台主机的定义如下/etc/hosts

192.168.0.100   server

1 的定义~/.ssh/config如下:

 Host    server
         HostName    192.168.0.101

然后您 ssh 进入服务器:ssh server

这样的冲突该如何解决呢?我想一个比另一个具有更高的优先级。

答案1

如果你这样做,ssh server服务器部分可能是一个真实的主机名或一些 ssh 内部“昵称”。 ssh 首先在 .ssh/config 中查找一些昵称,如果它在那里找到配置,它将使用它。如果它没有找到配置,它会假定一个真实的主机名并尝试通过 /etc/host 和 dns 解析它。

答案2

该文件~/.ssh/config与 无关/etc/hosts。相反,它是一个配置文件,ssh如果存在的话可以使用。

您可以看到,ssh在执行其他操作之前,使用详细开关 , -vto引用了该文件ssh

~/.ssh/config 中的主机条目

这里,我的文件中有~/.ssh/config一个名为“skinner”的服务器条目。我通过包含 3-v的开关来启用调试级别 3。

例子
$ ssh -vvv skinner 
OpenSSH_6.2p2, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/saml/.ssh/config
debug1: /home/saml/.ssh/config line 8: Applying options for *
debug1: /home/saml/.ssh/config line 35: Applying options for skinner
debug1: /home/saml/.ssh/config line 55: Applying options for *
debug3: cipher ok: arcfour [arcfour,blowfish-cbc]
debug3: cipher ok: blowfish-cbc [arcfour,blowfish-cbc]
debug3: ciphers ok: [arcfour,blowfish-cbc]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 50: Applying options for *
debug1: auto-mux: Trying existing master
...

在上面您可以看到正在ssh使用这个定义,甚至没有咨询系统的名称解析设施。

~/.ssh/config 中没有主机条目

如果文件中没有相应的条目~/.ssh/configssh则将查询系统的 DNS 解析以了解如何连接到已指定的主机名。

例子
$ ssh -vvv skinner
OpenSSH_6.2p2, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/saml/.ssh/config
debug1: /home/saml/.ssh/config line 8: Applying options for *
debug1: /home/saml/.ssh/config line 55: Applying options for *
debug3: cipher ok: arcfour [arcfour,blowfish-cbc]
debug3: cipher ok: blowfish-cbc [arcfour,blowfish-cbc]
debug3: ciphers ok: [arcfour,blowfish-cbc]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 50: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/saml/.ssh/master-saml@skinner:22" does not exist
debug2: ssh_connect: needpriv 0
debug1: Connecting to skinner [192.168.1.3] port 22.
debug1: Connection established.

在这里您可以看到正在ssh咨询系统以查找主机名“skinner”的 IP 地址。

笔记:您可以使用getent来查找系统上的主机名:

$ getent hosts skinner
192.168.1.3     skinner.dom.net

答案3

一般来说,对于一般的 Unix 软件,用户特定的设置(在本例中为~/.ssh/config)将覆盖系统范围的设置(在本例中为/etc/hosts);因此,中的设置~/.ssh/config将具有更高的优先级。

相关内容