Como posso corresponder um intervalo CIDR para uma entrada de host de configuração SSH?

17

Estou procurando uma maneira de usar blocos CIDR específicos para corresponder os hosts na configuração do cliente SSH (geralmente ~/.ssh/config ). Por exemplo, eu tenho uma entrada para encaminhar todo o tráfego através de um host bastion se o IP cair em um determinado intervalo, digamos 10.1.0.0/16 :

host 10.1.*
    proxycommand ssh -q bastion -W %h:%p

Isso funciona muito bem, mas e quando eu adiciono alguns intervalos que não se encaixam exatamente na notação de ponto?

# doesn't work, unfortunately
host 10.2.0.0/18
    proxycommand ssh -q bastion-foo -W %h:%p
host 10.2.64.0/18
    proxycommand ssh -q bastion-bar -W %h:%p

Existe algo no manual que eu perdi, ou um truque de script inteligente que permitiria a correspondência desses intervalos de IP do host?

    
por fazy 19.09.2016 / 09:05

1 resposta

18

A correspondência com padrões no arquivo ssh_config é feita como correspondência básica de padrões, não como correspondência de rede / CIDR. Então, usar a notação CIDR não vai funcionar.

A página do manual explica que:

A pattern consists of zero or more non-whitespace characters, * (a wildcard that matches zero or more characters), or ? (a wildcard that matches exactly one character).

O melhor que você pode fazer é usar uma lista de mais de um padrão. Mais uma vez, na página de manual:

A pattern-list is a comma-separated list of patterns. Patterns within pattern-lists may be negated by preceding them with an exclamation mark (!).

Então, para cobrir suas duas / 18 redes, você precisa listar:

  • todos os hosts que correspondem a 10.2.?.* (por exemplo, 10.2.0.0–10.2.9.255)
  • todos os hosts que correspondem a 10.2.??.* (por exemplo, 10.2.10.0–10.2.99.255)
  • todos os hosts que correspondem a 10.2.10?.* (por exemplo, 10.2.100.0–10.2.109.255)
  • todos os hosts que correspondem a 10.2.11?.* (por exemplo, 10.2.110.0–10.2.119.255)
  • todos os hosts que correspondem a 10.2.12?.* EXCETO os que correspondem a 10.2.128.* e 10.12.129.* (e lembre-se de que a exclusão deve vir primeiro!)

Sua lista de padrões deve ficar assim:

Host "10.2.?.*,10.2.??.*, 10.2.10?.*,10.2.11?.*,!10.2.128.*,!10.2.129.*,10.2.12?.*"
    
por 19.09.2016 / 09:25

Tags