Múltiple 'Host *' en ssh_config?


27

Comprendo cómo funciona ~ / .ssh / config es que cada línea 'Host' tiene efecto para cualquier coincidencia de host después de ese punto en el archivo de configuración.

Tengo varios servidores personales y servidores de trabajo a los que necesito conectarme. Estoy tratando de hacer algo como lo siguiente:

# Configuración general
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent sí
Reenviar X11 sí
GSSAPIA autenticación no
Pubkey Autenticación sí

# Servidores personales
Anfitrión *
Usuario harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Host host1
Nombre de host host1.com

Host host2
Nombre de host host2.com

# Servidores de trabajo
Anfitrión *
Usuario alan.young
IdentityFile ~ / .ssh / work_id_rsa

Trabajo anfitrión1
Nombre de host work1.companyserver.com

Trabajo anfitrión2
Nombre de host work2.companyserver.com

Anfitrión *
Usuario devuser

Host dev1
Nombre de host dev1.companyserver.com

Host dev2
Nombre de host dev2.companyserver.com

Los documentos parecen indicar que host1 y host2 deberían usar 'personal_id_rsa' y el usuario harleypig. work1, work2, dev1 y dev2 deberían usar 'work_id_rsa' y los dos primeros deberían ser el usuario 'alan.young' y dev1 y dev2 deberían ser el usuario 'devuser'

Sin embargo, esto no está sucediendo. Cualquier 'Host *' que coloque primero es con lo que intentan conectarse todos los hosts siguientes. ¿Estoy malentendido o me falta algo?


Gracias, entre ambas respuestas pude hacer que mis conexiones funcionaran.
— harleypig

Respuestas:


36

Del ssh_configmanual :

Dado que se utiliza el primer valor obtenido para cada parámetro, se deben proporcionar más declaraciones específicas del host cerca del comienzo del archivo y valores predeterminados generales al final.

Entonces, en su ejemplo, todos los hosts usarán User harleypigy IdentityFile ~/.ssh/personal_id_rsa.

Piense en las Hostdirectivas con comodines como retrocesos: use la siguiente configuración solo si aún no se han configurado. Necesitas escribir algo como esto:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Puede poner múltiples patrones en una Hostlínea si un conjunto dado de alias de host no puede coincidir con comodines, por ejemplo Host host* more* outlier.


15

Definitivamente lo estás haciendo mal.

  • Siempre debe poner Host *como la última entrada.
  • No puedes tener múltiples Host *entradas

Si sus máquinas de trabajo tienen un formato de nombre que puede generalizar para apuntar solo a las máquinas de trabajo, por ejemplo: machine1.work.com, host.work.com, fileserver.work.com, puede dirigir sus máquinas de trabajo como:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

Lo mismo aplica para sus máquinas personales.


Para mí, poner Host *al principio del archivo parece funcionar bien. ¿Quizás el hecho de que esté usando un comodín supera el hecho de que es la primera entrada al priorizarlos?
— Zaz

Por cierto, el Host *.work.comes una sintaxis no válida. Solo funciona al revés:Host myserver*
— Daniel Andrei Mincă

3
@ MincăDanielAndrei funciona en ambos sentidos, es solo una expresión comodín y puede usarlo como cualquier otro comodín. Host git-codecommit. *. Amazonaws.com Este es un ejemplo de trabajo de mi ~ / .ssh / config
— Hameedullah Khan

@HameedullahKhan en serio, lo he intentado y no responde. Si lo haces Host *subdomain.com, no va a responder.
— Daniel Andrei Mincă

1
@ MincăDanielAndrei Ese comportamiento está documentado en las páginas del manual, si no funciona (para mí tampoco) es un error.
— goetzc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.