Gerar dinamicamente entradas do Host SSH em ~ / .ssh / config

6

Eu tenho que administrar uma pilha inteira de hosts sobre o ssh. No entanto, só posso acessá-los através de um determinado servidor ssh de gateway.

Eu tenho o seguinte no meu ~/.ssh/config :

Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

No entanto, tenho que me conectar a muitas dessas máquinas. Em vez de colocar dezenas de entradas no meu ~/.ssh/config , existe alguma maneira que eu possa ter algo assim:

Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

Eu sei que você pode usar %h no argumento Hostname , mas esse seria o nome do host. O que eu realmente preciso é de algum tipo de substituição de string, como ${VAR%thingie} do bash. Isso é possível?

    
por Rory 16.06.2009 / 11:48

5 respostas

2

Parece que não há como fazer isso.

    
por 22.06.2009 / 12:38
19

Isso pode ser feito com o seguinte arquivo de configuração SSH:

Host *
  ServerAliveInterval 120

Host gateway.somewhere.com
  User jdoe

Host gateway+*
  User jdoe
  ProxyCommand ssh -T -a $(echo %h |cut -d+ -f1).somewhere.com nc $(echo %h |cut -d+ -f2) %p 2>/dev/null
  ControlMaster auto
  ControlPath ~/.ssh/ssh-control_%r@%h:%p

Você acessa seus hosts internos da seguinte maneira:

ssh gateway+internalhost01.somewhere.com
ssh gateway+internalhost02.somewhere.com

O nome que você escolher para a metade direita deve ser resolvido pelo host de salto.

O parâmetro User é especificado caso você precise mapear manualmente para diferentes usuários nas diferentes classes de hosts. O ControlMaster e o ControlPath são especificados para permitir a reutilização da conexão SSH.

    
por 06.09.2013 / 14:17
3

Você não precisa especificar manualmente HostName, pois ele virá da linha de comando.

Basta tentar:

Host *.domain  
  IdentityFile ~/.ssh/id_rsa  
  ProxyCommand ssh mygateway /usr/bin/nc %h 22
    
por 16.06.2009 / 11:56
1

Eu tive um problema semelhante e acabei escrevendo um script que gerou todo o clichê para mim. Eu não mudo mais o ~ / ssh / config, eu mudo o ~ / ssh / config.in e executo novamente o meu script.

    
por 19.09.2009 / 16:39
0

Eu tinha um cliente com a mesma configuração e usei DSSH para resolver meu problema.
O DSSH, entre outras coisas, permite que você faça login de forma transparente em hosts remotos por meio de um host de gateway.

Casos de uso

  • Colete parâmetros de configuração dos roteadores Cisco que exigem login "ena"
  • Faça login nos servidores, que têm o PermitRootLogin desativado diretamente como raiz (digitando su - e senha automaticamente), preservando o status de saída
  • Adicione lógica personalizada, como registro avançado
  • túnel através de várias conexões para chegar ao servidor de destino
por 16.06.2009 / 12:29

Tags