Какой приоритет будет иметь при конфликте между ~/.ssh/config hostname и /etc/hosts?

Какой приоритет будет иметь при конфликте между ~/.ssh/config hostname и /etc/hosts?

Что если один хост определен следующим /etc/hostsобразом:

192.168.0.100   server

и один определяется ~/.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, для 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происходит обращение к системе, чтобы узнать IP-адрес для имени хоста «skinner».

ПРИМЕЧАНИЕ:getentДля поиска имен хостов в вашей системе вы можете использовать :

$ getent hosts skinner
192.168.1.3     skinner.dom.net

решение3

Как правило, для программного обеспечения Unix в целом пользовательские настройки (в данном случае ~/.ssh/config) переопределяют общесистемные настройки (в данном случае /etc/hosts); таким образом, настройки в ~/.ssh/configбудут иметь более высокий приоритет.

Связанный контент