Regexp en .ssh / config

12

En el trabajo, que a menudo tienen que entrar en huéspedes que siguen un esquema de nombres comunes, por ejemplo qc01- qc12, hc01- hc10, y así sucesivamente. Todos estos necesitan obtener los mismos valores de configuración en mi computadora portátil .ssh/config. Por supuesto, podría usar entradas para los hosts qc*y hc*, pero me pregunto si en cambio es posible usar expresiones regulares.

andreas-h
fuente

Respuestas:

4

Por favor, vea la PATTERNSsección en man ssh_config.

La respuesta larga es: No, no puedes, a menos que parches tu sshpara apoyar eso.

gelraen
fuente
No puedo encontrar esta sección en mi man ssh_config.
Patryk
1
pruebe linux.die.net/man/5/ssh_config
gelraen el
¿Qué versión apareció eso?
vonbrand
3

Puede usar expresiones regulares completas en su ssh_config.

La documentación relevante es IMO muy difícil de leer y entender. Solo lo entiendo porque tengo más de 13 años de experiencia en Linux y más de 8 años usando ssh. Así que aquí está mi resumen de la documentación:

  • man ssh_config describe una característica llamada Match
  • entonces hay una característica llamada execque le permite usar un comando de shell arbitrario para determinar una coincidencia
  • es posible pasar parámetros de entrada al comando de shell arbitrario y se describe en la sección etiquetada TOKENS

En mi caso terminé usando en mi~/.ssh/config :

Match exec "echo %h | grep -q 'NAME[0-9]\+$'"
    User USER
    IdentityFile /path/to/identity/file
    Hostname %h.fully.qualified.domain.name

La prueba debe hacerse con algo complicado como este. Y para hacer esa prueba llamas ssh -vvv HOSTNAME. Lo que mostrará exactamente lo que está sucediendo y si su nuevo Matchse implementa correctamente.

Trevor Boyd Smith
fuente
0

Extendiendo la respuesta de Trevor:

Los hosts más complejos también son posibles, como la coincidencia foo123.123y foo10.10en una regla SIN tener entradas DNS para los nombres de host utilizados:

Match exec "echo %h | grep -q 'foo[0-9]\+.[0-9]\+$'"
    Port 1234 # just to show it can be paired with non-default ports too,
              # see %p in man ssh_config
    ProxyCommand /usr/bin/nc 10.10.$(echo %h | sed -e 's/foo//') %p

Usando el ProxyCommand para manipular el contenido de% h con el shell y conectando al puerto correcto a través de un netcat. De esta forma, puede crear ajustes preestablecidos para la categoría de hosts, sin crear entradas individuales.

diablillo
fuente