Existe uma maneira de ter expressão regular em ~ / .ssh / config

7

Eu tenho dois conjuntos de servidores. Teste na produção. Todo servidor tem ip interno. atualmente estou usando o alias para efetuar login:

Host pro-10
Hostname 192.168.1.10
ProxyCommand ssh production-server nc %h %p

Para cada servidor, preciso repetir essa regra. Eu estou procurando uma maneira de expressão regualr para fazer isso?

Host pro-*
Hostname 192.168.1.$1
ProxyCommand ssh production-server nc %h %p

Existe uma maneira de fazer isso?

    
por Vivek Goel 05.01.2013 / 22:49

4 respostas

15

Não, o ssh não suporta expressões regulares em ssh_config (1) e o exemplo que você deu não são expressões regulares. ssh_config (1) suporta PATTERNS , ou seja, você pode definir um padrão para seus IPs, ou seja:

Host 192.168.1.*
  ProxyCommand ssh production-server nc %h %p

e você deve ter o encaminhamento para todos os seus IPs internos. Outra solução seria adicionar entradas a /etc/hosts para os IPs específicos, ou seja:

192.168.1.10 pro10
192.168.1.11 pro11

e crie uma entrada no seu arquivo ~/.ssh/config :

Host pro1?
  ProxyCommand ssh production-server nc %h %p
    
por 06.01.2013 / 02:38
2

Não acredito que uma expressão regular seja possível para configurar dinamicamente a configuração do SSH. No entanto, você deve ser capaz de usar um loop for no Bash para criar automaticamente as três linhas no arquivo de configuração para cada servidor. Para este exemplo, assumirei que você precisa criar entradas para os servidores pro-75 para pro-125.

for i in $(seq 75 125);
do
    echo "Host pro-$i" >> ~/.ssh/config
    echo "Hostname 192.168.1.$i" >> ~/.ssh/config
    echo "ProxyCommand ssh production-server nc %h %p" >> ~/.ssh/config
    echo "\n" >> ~/.ssh/config
done

Isso criará uma lista de todos os números de 75 a 125 e os armazenará como a lista do loop. Em seguida, ele percorre cada membro da lista e substitui $ i. Cada linha é anexada ao final do arquivo de configuração do usuário do SSH. Finalmente, incluí a nova linha para dividir o arquivo de configuração um pouco.

Se você tiver valores específicos que são necessários na lista, em vez de um segmento contíguo de números, crie uma lista manualmente, assim:

1 23 45 67 89
    
por 06.01.2013 / 02:44
2

Não, não é possível, infelizmente. Como você provavelmente já sabe, é possível usar a expansão %h , mas é só isso.

No seu caso, por que não usar um loop for ?

for i in {4..10}
do  
  echo -e "Host pro-$i\nHostname 192.168.1.$i\nProxyCommand ssh production-server nc %h %p\n"; >> ~/.ssh/config
done

A única outra opção que eu poderia criar é, talvez, criar entradas DNS com regexp, se o seu servidor suportar isso e usá-las.

    
por 06.01.2013 / 02:38
0

com ProxyCommand é possível - porque é apenas um conjunto de comandos shell:

Anfitrião pro *
ProxyCommand ssh production-server nc 192.168.1.'echo "% h" | perl -pe 's / pro - //' '% p

    
por 27.11.2014 / 14:11