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.