O que será priorizado em um conflito entre ~/.ssh/config hostname e /etc/hosts?

O que será priorizado em um conflito entre ~/.ssh/config hostname e /etc/hosts?

E se um host for definido /etc/hostscomo:

192.168.0.100   server

e um é definido ~/.ssh/configcomo:

 Host    server
         HostName    192.168.0.101

e você faz ssh no servidor: ssh server.

Como tal conflito seria resolvido? Acho que um tem maior prioridade que o outro.

Responder1

Se você fizer isso, ssh servera parte do servidor poderá ser um nome de host real ou algum "apelido" interno do ssh. O ssh primeiro procura algum apelido em .ssh/config, se encontrar uma configuração lá ele usará isso. Se não encontrar uma configuração, ele assume um nome de host real e tenta resolvê-lo via /etc/host e DNS.

Responder2

O arquivo ~/.ssh/confignão tem nada a ver com /etc/hosts. Em vez disso, é um arquivo de configuração para sshusar, se existir.

Você pode ver que isso sshse refere a esse arquivo antes de fazer qualquer outra coisa usando a opção detalhada, -v, para ssh.

Entrada de host em ~/.ssh/config

Aqui tenho uma entrada em meu ~/.ssh/configarquivo para um servidor chamado "skinner". Estou habilitando o nível de depuração 3 incluindo 3 -vopções.

Exemplo
$ 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
...

Acima você pode perceber que sshestá fazendo uso desta definição e nem mesmo consultando os recursos de resolução de nomes do sistema.

Nenhuma entrada de host em ~/.ssh/config

Se não houver nenhuma entrada correspondente no ~/.ssh/configarquivo, sshconsultaremos a resolução DNS do sistema para descobrir como se conectar a um nome de host que foi especificado.

Exemplo
$ 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.

Aqui você pode ver que sshestá consultando o sistema para descobrir o endereço IP do hostname "skinner".

OBSERVAÇÃO:Você pode usar getentpara procurar nomes de host em seu sistema:

$ getent hosts skinner
192.168.1.3     skinner.dom.net

Responder3

Geralmente, para software Unix em geral, as configurações específicas do usuário (neste caso, ~/.ssh/config) substituiriam as configurações de todo o sistema (neste caso, /etc/hosts); portanto, as configurações ~/.ssh/configteriam maior prioridade.

informação relacionada