¿Qué puede causar que se ignoren los cambios de .ssh/config?

¿Qué puede causar que se ignoren los cambios de .ssh/config?

Tenía un ~/.ssh/configarchivo 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 unkownla *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 Userentrada *pero no se solucionó.

mi .ssh/configarchivo 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.comen lugar de repetirlos. Nada funciona. ¿Alguna idea de qué está mal ahí?

¿Cómo puedo tener un valor predeterminado Usery IdentityFileanularlo por dominio?


Edición 1: agregué el Host exact.hostname.domain.comantes y después del *. y ssh -vvvmuestra:

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 Hostentradas 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_gitsi eso es lo IdentityFileúnico que se menciona a continuación Host github.com? ¿Y por qué finalmente intenta enviar id_nulla pesar de que coincide con lo explícito Host exact.hostname.domain.comcomo 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 sshcreació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-configdice:

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 Hostentrada 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.

información relacionada