如果一台主机的定义如下/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
在执行其他操作之前,使用详细开关 , -v
to引用了该文件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/config
,ssh
则将查询系统的 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
将具有更高的优先级。