ssh config: como configurar em cascata

0

Digamos que eu tenha este arquivo de configuração ssh:

host server1
  user myUser1
  hostname 192.168.0.1
host server2
  user myUser
  hostname 192.168.0.2
host 192.168.0.*
  # global config here (such as proxycommand, etc)

Como posso fazer isso para que a configuração global seja aplicada ao server1 & server2?

Editar:

Eu não quero resolver isso usando padrões, eu quero a última entrada 'host' para verificar nomes de host anteriores. Acho que há uma opção para fazer isso, mas não consegui encontrá-lo na documentação.

    
por georgeMMM 16.07.2018 / 13:15

2 respostas

0

A palavra-chave Host corresponde ao host taraget fornecido na linha de comando. Assim, ao usar o seguinte arquivo, ssh test-host se conectará a 192.168.0.1 com o username atual (ou seja: ignorando a configuração específica do IP) - porque test-host não corresponde a 192.168.0.1 .

Host test-host
    Hostname 192.168.0.1

Host 192.168.0.1
    User test-user

Para fazer o trabalho acima conforme esperado, você deve definir CanonicalizeHostname=yes no seu arquivo de configuração. Isso pode ser colocado na seção global (no topo) ou por host, por exemplo:

Host test-host
    Hostname 192.168.0.1
    CanonicalizeHostname yes

Host 192.168.0.1
    User test-user

Isso faria com que o test-host fosse reescrito 192.168.0.1 .

Observe que ProxyCommand tem semântica especial:

CanonicalizeHostname

Controls whether explicit hostname canonicalization is performed. The default, no, is not to perform any name rewriting and let the system resolver handle all hostname lookups. If set to yes then, for connections that do not use a ProxyCommand, ssh(1) will attempt to canonicalize the hostname specified on the command line using the CanonicalDomains suffixes and CanonicalizePermittedCNAMEs rules. If CanonicalizeHostname is set to always, then canonicalization is applied to proxied connections too.

If this option is enabled, then the configuration files are processed again using the new target name to pick up any new configuration in matching Host and Match stanzas.

Alternativas para alcançar o comportamento que você procura são:

A

host server1
  user myUser1
  hostname 192.168.0.1

host server2
  user myUser
  hostname 192.168.0.2

host server1 server2
  # global config here (such as proxycommand, etc)

B

host 192.168.0.1
  user myUser1

host 192.168.0.2
  user myUser

host 192.168.0.*
  # global config here (such as proxycommand, etc)
    
por 19.07.2018 / 13:30
0

Como você já demonstrou, é possível adicionar uma sub-rotina Host * ou mesmo Host server* ao seu arquivo de configuração, que será aplicada a todos os hosts que corresponderem à regex (limitada). Por exemplo,

Host *
  ProxyCommand ...

Há também o padrão ? que corresponde a um único caractere, como em:

Host server?
  ...

Você também pode se inscrever em vários hosts, separados por espaços, como em:

Host crypto cryptonomicon crypto.example.com
  HostName crypto.example.com
  HostKeyAlias crypto
  User me

FWIW, tudo isso está claramente definido na ssh_config man page - procure a seção intitulada "Padrões"

    
por 17.07.2018 / 19:33

Tags