Alterando o hostname mais de uma vez via ~ / .ssh / config

0

Eu tenho a seguinte configuração no meu ~ / .ssh / config

match host devbox 
 compression yes 
 user hari 
 port 22 
 hostname 192.168.9.7 

match originalhost devbox exec "~/.ssh/check_if_outside_home.sh" 
 hostname devbox.harisund.com 

A ideia é esta -

  • Sempre conecte-se a 192.168.8.15 (isso funcionará se eu já estiver na rede doméstica)
  • Conecte-se ao devbox.harisund.com, se eu não estiver dentro da LAN doméstica

No entanto, com o log detalhado, vejo isso -

  1 OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016 
  2 debug1: Reading configuration data /home/hsundararaja/.ssh/config 
  3 debug2: checking match for 'host devbox' host devbox originally devbox 
  4 debug3: /home/hsundararaja/.ssh/config line 734: matched 'host "devbox"' 
  5 debug2: match found 
  6 debug2: checking match for 'originalhost devbox exec "~/.ssh/check_if_outside_home.sh"' host 192.168.9.7 originally devbox 
  7 debug3: /home/hsundararaja/.ssh/config line 744: matched 'originalhost "devbox"' 
  8 debug1: Executing command: '~/.ssh/check_if_outside_home.sh' 
  9 debug1: permanently_drop_suid: 14741 
 10 debug3: command returned status 0 
 11 debug3: /home/hsundararaja/.ssh/config line 744: matched 'exec "~/.ssh/check_if_outside_home.sh"' 
 12 debug2: match found 
 13 debug1: /home/hsundararaja/.ssh/config line 839: Applying options for * 
 14 debug1: Reading configuration data /etc/ssh/ssh_config 
 15 debug1: /etc/ssh/ssh_config line 19: Applying options for * 
 16 debug2: resolving "192.168.9.7" port 22 
 17 debug2: ssh_connect_direct: needpriv 0 
 18 debug1: Connecting to 192.168.9.7 [192.168.9.7] port 22. 
 19 debug2: fd 3 setting O_NONBLOCK 
 20 debug1: connect to address 192.168.9.7 port 22: Connection timed out 
 21 ssh: connect to host 192.168.9.7 port 22: Connection timed out 

Na linha 4, ele detecta a primeira estrofe em ~ / .ssh / config. Neste ponto, o nome do host é alterado para 192.168.9.7. Tudo bem até agora.

Na linha 7, alcança a segunda estrofe.

Na linha 8, verifica se estamos fora de casa e retorna 0. Como esperado.

A linha 12 diz que é uma correspondência, o que significa que devemos mudar nosso nome de host para devbox.harisund.com

No entanto, na linha 16, vemos que ainda está usando o nome do host local como foi definido.

Por quê? Esse comportamento é esperado?

    
por Hari Sundararajan 09.10.2018 / 10:08

1 resposta

0

Isso é exatamente como foi projetado e documentado em man 5 ssh_config :

For each parameter, the first obtained value will be used. The configuration files contain sections separated by Host specifications, and that section is only applied for hosts that match one of the patterns given in the specification. The matched host name is usually the one given on the command line (see the CanonicalizeHostname option for exceptions).

Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general defaults at the end.

Então, em suma, seu match originalhost não pode substituir um hostname pré-existente, trocar o pedido e você deve estar bem.

    
por 09.10.2018 / 11:25

Tags