
Tenía un ~/.ssh/config
archivo que funcionaba bien. estaba en este formato:
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 5000
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
(Tenía muchos más dominios, pero ignorémoslos por ahora)
Estaba funcionando perfectamente, incluso el manual decía que los patrones de hosts más específicos deberían estar en la parte superior, siempre funcionó bien de esa manera. Siempre entré a esos dos dominios y las claves de identidad correctas se recogieron sin problemas. Nunca tuve un problema cuando se intentó la clave nula en esos dos dominios. Y lo usé durante años. Siempre obtuve el usuario y la clave correctos. He usado este mismo archivo de configuración tanto en Debian, Fedora como en OSX.
Hoy, en OSX 10.10 (OpenSSH_6.2p2, OSSLShim 0.9.8r 8 de diciembre de 2011), que funcionó antes, intenté agregar también User unkown
la *
regla en la parte superior. y de repente, cada ssh que intento, ssh envía usuario=desconocido e identidadarchivo=id_null, que no inicia sesión en ninguna parte. Eso me hizo leer la página de manual de ssh_config y dejar todo exactamente según las reglas... y todavía no funciona. También intenté eliminar la User
entrada *
pero no se solucionó.
mi .ssh/config
archivo actual es
Host exact.hostname.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 50
Seguirá intentando utilizar id_null como archivo de identidad cuando ssh exact.hostname.domain.com
. También intenté usar múltiples patrones y Host *.domain.com exact.hostname.domain.com
en lugar de repetirlos. Nada funciona. ¿Alguna idea de qué está mal ahí?
¿Cómo puedo tener un valor predeterminado User
y IdentityFile
anularlo por dominio?
Edición 1: agregué el Host exact.hostname.domain.com
antes y después del *
. y ssh -vvv
muestra:
debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com
pero todavía llego al finalno such identity: .ssh/id_null: No such file or directory
edición 2: alguna otra rareza que vi enssh -vvv
Siempre intenta utilizar todas las claves que tengo. Así que pensé que debido a que podría tener algún valor predeterminado codificado .ssh/id_rsa*
, moví todas mis claves privadas para .ssh/keys/
ocultarlo de ese valor predeterminado y actualicé las Host
entradas específicas... ¡resulta que está probando claves de todas las entradas del host! ¡Incluso los que no tienen fósforo!
Recapitulando, tengo una coincidencia de host específica en la parte superior e inferior del archivo (solo para estar seguro), luego hosts que no coinciden y el *
.
pero ssh -vvv muestra:
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit
¿Por qué diablos se agrega .ssh/keys/id_rsa_git
si eso es lo IdentityFile
único que se menciona a continuación Host github.com
? ¿Y por qué finalmente intenta enviar id_null
a pesar de que coincide con lo explícito Host exact.hostname.domain.com
como dice en la salida de depuración debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
?
edición 3:
después de mover todas mis claves .ssh/keys/*
y solo especificar las claves allí para cada host ssh_config
, ahora veo en cada ssh
creación de instancias:
/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory
pero incluso después de eso,aúncarga los IdentityFiles desdeotrohosts en ssh_config mientras se conecta. ¡¿Por qué?!
Respuesta1
man ssh-config
dice:
Dado que se utiliza el primer valor obtenido para cada parámetro, se deben proporcionar más declaraciones específicas del host cerca del principio del archivo y los valores predeterminados generales al final.
Así que asegúrese de que la configuración que desea esté en la primera Host
entrada coincidente, como lo muestran las ssh -vv
líneas que coinciden: Applying options for
.
En el caso general, esto significa que Host *
debería serúltimo.