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 %h
en el Hostname
argumento, 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.d
un 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/config
archivo 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
Hostname
declaración y, en su lugar, determinarlo en tiempo de ejecución. Para hacerlo, evalúelo como parte delProxyCommand
, usando%h
para referenciarlo en el comando (también use en%p
lugar 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