Tengo que administrar un montón de hosts a través de ssh. Sin embargo, solo puedo acceder a ellos a través de un determinado servidor ssh de puerta de enlace.
Tengo lo siguiente en mi ~/.ssh/config:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Sin embargo, tengo que conectarme a muchas de estas máquinas. En lugar de poner docenas de entradas en mi ~/.ssh/config, ¿hay alguna forma de que pueda tener algo como esto:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Sé que puedes usarlo %hen el Hostnameargumento, pero ese sería el nombre de host. Lo que realmente necesito es algún tipo de sustitución de cadena, como bash ${VAR%thingie}. es posible?

Parece que no hay forma de hacer esto.
fuente
Tuve un problema similar y terminé escribiendo un script que generó toda la plantilla para mí. Ya no cambio ~ / ssh / config, cambio ~ / ssh / config.in y vuelvo a ejecutar mi script.
fuente
.ssh/config.dun archivo para cada plantilla, donde cada plantilla generaría una o más entradas en la final~/.ssh/config. También habría un archivo con variables universales, pero cada plantilla podría tener sus propias variables que tendrían prioridad sobre los globales, enumerados en la parte superior. El~/.ssh/configarchivo podría generarse a pedido o en un horario, no importaría, siempre y cuando nunca haya realizado modificaciones directas que desea conservar.Ignorar la especificación que anula el nombre de host directamente a través de la
Hostnamedeclaración y, en su lugar, determinarlo en tiempo de ejecución. Para hacerlo, evalúelo como parte delProxyCommand, usando%hpara referenciarlo en el comando (también use en%plugar del puerto de codificación como 22), es decirIncluso se podría tener una estrofa más genérica, mediante la cual puede especificar cualquier host sin un
-solo ser tratado como es, o según otras estrofas coincidentes, pero tener un-enfoque genérico para especificar cualquiera<gateway>-<target>:Además, las versiones más nuevas del cliente SSH admiten la
[-W host:port]opción de realizar directamente la misma función quenc(netcat). Como tal, podemos usar el modificado:Por supuesto, si tuviera una lista finita de hosts, siempre podría hacer:
¡Espero que esto ayude!
fuente
Tenía un cliente con la misma configuración y usé DSSH para resolver mi problema.
DSSH, entre otras cosas, le permite iniciar sesión de forma transparente en hosts remotos a través de un host de puerta de enlace.
Casos de uso
fuente