Eu tenho que administrar uma pilha inteira de hosts sobre 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 mesmo assim eu posso ter algo como isto:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Eu sei que você pode usar %h
no Hostname
argumento, mas esse seria o nome do host. O que eu realmente preciso é de algum tipo de substituição de string, como o do bash ${VAR%thingie}
. Isso é possível?
Parece que não há como fazer isso.
fonte
Eu tive um problema semelhante e acabei escrevendo um script que gerou todo o padrão para mim. Não altero mais o ~ / ssh / config, altero o ~ / ssh / config.in e executo o meu script.
fonte
.ssh/config.d
um arquivo para cada modelo, onde cada modelo geraria uma ou mais entradas na final~/.ssh/config
. Também haveria um arquivo com variáveis universais, mas cada modelo poderia ter suas próprias variáveis que teriam precedência sobre as globais, listadas na parte superior. O~/.ssh/config
arquivo pode ser gerado sob demanda ou em uma programação - não importaria - desde que você nunca faça edições diretas nele que deseja preservar.Ignore a especificação de substituir o nome do host diretamente por meio da
Hostname
declaração e, em vez disso, determine-o em tempo de execução. Faça isso avaliando-o como parte doProxyCommand
, usando%h
para referenciá-lo no comando (também use em%p
vez de codificar como 22)Pode-se até ter uma estrofe mais genérica, na qual é possível especificar qualquer host sem
-
a apenas para ser tratado como está, ou conforme outra estrofe correspondente, mas ter uma-
abordagem genérica para especificar qualquer<gateway>-<target>
:Além disso, as versões mais recentes do cliente SSH oferecem suporte à
[-W host:port]
opção de executar diretamente a mesma função quenc
(netcat). Como tal, podemos usar o modificado:Obviamente, se você tiver uma lista finita de hosts, sempre poderá:
Espero que isto ajude!
fonte
Eu tinha um cliente com a mesma configuração e usei o DSSH para resolver meu problema.
O DSSH, entre outras coisas, permite que você efetue login transparente em hosts remotos por meio de um host de gateway.
Casos de uso
fonte