Cambiar SSH Jump Host según el prefijo/sufijo del nombre de host

Cambiar SSH Jump Host según el prefijo/sufijo del nombre de host

Quiero acceder a algunas máquinas muy similares que están en una red privada: A, B, C. He configurado un JumpHost J1y configuré la configuración para que lo usen:

Host J1
    HostName 123.123.123.123
    User ciprian

Host A B C
    HostName %h
    User ciprian
    ProxyJump J1
    LocalForward 8501 localhost:8501

Ahora estoy configurando un segundo JumpHost J2y me gustaría conectarme a las mismas máquinas a través de J1o J2. ¿Hay alguna manera de escribir el archivo de configuración de modo que si la máquina tiene J1el nombre, salte J1, o si lo tiene J2, salte J2? Por supuesto, sin especificar manualmente coincidencias exactas :)

Puedo escribir la configuración de esta manera:

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

Host A* B* C*
    # --- Which Host name? ---
    User ciprian
    # ...

entonces, si doy ssh A-J1, retomará la configuración para saltar a través de J1. Sin embargo, cuando analiza la definición relacionada con A*, ya no puedo especificar HostName, ya que %hse resolvería en A-J1, y me gustaría que se resuelva solo en A.

Creo que se puede lograr algo de magia con CanonicalizeHostNamey CanonicalizePermittedCNAMEs, pero no estoy seguro de cómo.

Respuesta1

Puedes usar ProxyCommand y algún script de shell menor:

Host *-prefix1
   ProxyCommand ssh -q jump1 'H="%h"; nc ${H%%-prefix1} %p || echo "ProxyCommand failed! >&2"'

Host *-prefix2
   ProxyCommand ssh -q jump2 'H="%h"; nc ${H%%-prefix2} %p || echo "ProxyCommand failed! >&2"'

información relacionada