¿Cómo podría dejar de que ssh ofrezca una clave incorrecta?

33

(Esto es un problema con ssh, no con gitolita)

He configurado gitolite en mi servidor doméstico (servidor ubuntu 12.04, open-ssh). Quiero un archivo de identidad especial para administrar los repositorios, así que necesito acceder a través de ssh a mi propio host utilizando dos claves de identidad diferentes.

Este es el contenido de mi archivo .ssh / config:

Host gitadmin.gammu.com
User            git
IdentityFile    /home/alvaro/.ssh/id_gitolite_mantra

Host git.gammu.com
User            git
IdentityFile    /home/alvaro/.ssh/id_alvaro_mantra

Este es el contenido de mi archivo de hosts:

# Git
127.0.0.1      gitadmin.gammu.com
127.0.0.1      git.gammu.com

Entonces debería poder comunicarme con gitolite de esta manera para acceder con la cuenta "normal":

$ssh git.gammu.com 

y esta forma de acceder con la cuenta administrativa:

$ssh gitadmin.gammu.com

Cuando intento acceder con la cuenta normal, todo está bien:

alvaro@mantra:~/.ssh$ ssh git.gammu.com
PTY allocation request failed on channel 0
hello alvaro, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5
the gitolite config gives you the following access:
    @R_ @W_    testing
Connection to git.gammu.com closed.

Cuando hago lo mismo con la cuenta administrativa:

alvaro@mantra:~$ ssh gitadmin.gammu.com
PTY allocation request failed on channel 0
hello alvaro, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5
the gitolite config gives you the following access:
    @R_ @W_    testing
Connection to gitadmin.gammu.com closed.

Debería mostrar el repositorio administrativo. Si inicio ssh con la opción detallada:

ssh -vvv gitadmin.gammu.com 
...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/alvaro/.ssh/id_alvaro_mantra (0x7f7cb6c0fbc0)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7f7cb6c044d0)
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/alvaro/.ssh/id_alvaro_mantra
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...

Está ofreciendo la clave id_alvaro_mantra, ¡y no debería!

Lo mismo sucede cuando especifico la clave con la opción -i:

ssh -i /home/alvaro/.ssh/id_gitolite_mantra -vvv gitadmin.gammu.com
...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/alvaro/.ssh/id_alvaro_mantra (0x7fa365237f90)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7fa365230550)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7fa365231050)
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/alvaro/.ssh/id_alvaro_mantra
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp 36:b1:43:36:af:4f:00:e5:e1:39:50:7e:07:80:14:26
debug3: sign_and_send_pubkey: RSA 36:b1:43:36:af:4f:00:e5:e1:39:50:7e:07:80:14:26
debug1: Authentication succeeded (publickey).
...

¿Qué esta pasando? Me falta algo, pero no puedo encontrar qué.

Estos son los contenidos de mi directorio de inicio:

-rw-rw-r--  1 alvaro alvaro  395 nov 14 18:00 authorized_keys
-rw-rw-r--  1 alvaro alvaro  326 nov 21 10:21 config
-rw-------  1 alvaro alvaro  137 nov 20 20:26 environment
-rw-------  1 alvaro alvaro 1766 nov 20 21:41 id_alvaromaceda.es
-rw-r--r--  1 alvaro alvaro  404 nov 20 21:41 id_alvaromaceda.es.pub
-rw-------  1 alvaro alvaro 1766 nov 14 17:59 id_alvaro_mantra
-rw-r--r--  1 alvaro alvaro  395 nov 14 17:59 id_alvaro_mantra.pub
-rw-------  1 alvaro alvaro  771 nov 14 18:03 id_developer_mantra
-rw-------  1 alvaro alvaro 1679 nov 20 12:37 id_dos_pruebasgit
-rw-r--r--  1 alvaro alvaro  395 nov 20 12:37 id_dos_pruebasgit.pub
-rw-------  1 alvaro alvaro 1679 nov 20 12:46 id_gitolite_mantra
-rw-r--r--  1 alvaro alvaro  397 nov 20 12:46 id_gitolite_mantra.pub
-rw-------  1 alvaro alvaro 1675 nov 20 21:44 id_gitpruebas.es
-rw-r--r--  1 alvaro alvaro  408 nov 20 21:44 id_gitpruebas.es.pub
-rw-------  1 alvaro alvaro 1679 nov 20 12:34 id_uno_pruebasgit
-rw-r--r--  1 alvaro alvaro  395 nov 20 12:34 id_uno_pruebasgit.pub
-rw-r--r--  1 alvaro alvaro 2434 nov 21 10:11 known_hosts

Hay un montón de otras claves que no se ofrecen ... ¿por qué se ofrece id_alvaro_mantra y no las otras claves? No puedo entender

Necesito ayuda, no sé dónde buscar ...

Alvaro Maceda
fuente

Respuestas:

53

Este es el comportamiento esperado de acuerdo con la página de manual de ssh_config:

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
         tion identity is read.  The default is ~/.ssh/identity for protocol
         version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
         protocol version 2.  Additionally, any identities represented by the
         authentication agent will be used for authentication.  

         [...]

         It is possible to have multiple identity files specified in configu‐
         ration files; all these identities will be tried in sequence.  Mul‐
         tiple IdentityFile directives will add to the list of identities
         tried (this behaviour differs from that of other configuration
         directives).

Básicamente, especificar IdentityFiles solo agrega claves a una lista actual que el agente SSH ya presentó al cliente.

Intente anular este comportamiento con esto en la parte inferior de su .ssh/configarchivo:

Host *
IdentitiesOnly yes
gertvdijk
fuente
Muchas gracias, eso funcionó. ¡Me había olvidado por completo de ssh-agent!
Álvaro Maceda
3
Además, puede especificarlo en el nivel de host, eso es lo que finalmente hice: Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra IdentitiesOnly yes`
Alvaro Maceda
2
@AlvaroMaceda es correcto. Agregar IdentitiesOnly yesa las Hostentradas gitadmin.gammu.com y git.gammu.com es suficiente. No tiene que hacer una entrada comodín que afectará a otros hosts.
Bruno Bronosky
6

Para mí, la solución fue agregar una clave a una lista de claves ssh, con un comando:

ssh-add ~/.ssh/id_name_of_my_rsa_key

por lo que podría ofrecerse cuando se conecta al servidor. Después de agregar un ssh, se reconoció automáticamente el correcto.

Editar:

Pero recientemente creo que la mejor solución, y la más permanente, es ir ~/.ssh/configy agregar IdentitiesOnly yessu archivo de configuración de esta manera:

Host github.com
  HostName github.com
    User git
      IdentityFile ~/.ssh/id_rsa
      IdentitiesOnly yes
Aleks
fuente
Gracias, su segundo enfoque fue exactamente lo que debería hacer. Notas al margen: HostName es excesivo en su ejemplo, ya que su valor es igual al del Host, la sangría en más de un nivel no tiene medios ya que hay agrupación por Host y Match solo en ssh_config.
dess
El segundo enfoque fue el único que funcionó para mí en OS X Catalina.
Daryl