Git y SSH, ¿qué clave se usa?

94

Digamos que su .sshdirectorio contiene 30 claves (15 privadas y 15 públicas).

¿Dónde en Git se puede comprobar cuál se utiliza para conectarse a un repositorio remoto determinado?

James Raitsev
fuente
10
Quien haya votado a favor de "cerrar", esta pregunta, está directamente relacionada con la programación por la misma razón que aquí se permiten preguntas sobre GIT
James Raitsev
1
Podría decirse ... Esta es realmente una pregunta de superusuario, el problema aquí no es git, sino la plataforma en la que se ejecuta. No puede verificar "en git" el problema, porque a git no le importa, se relaciona solo con cómo usa ssh y cómo está configurado. ¿Utiliza ssh-agent, algún tipo de sistema de gestión de claves, qué sistema operativo utiliza, qué versión, etcétera?
Arafangion

Respuestas:

68

La siguiente entrada en el .ssh/configarchivo resuelve el problema

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

¿Dónde ~/.ssh/whateverhay un camino a su clave privada?

Además, el usuario y el host se pueden recoger de

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
fuente
entonces, si quisiera usar otra clave ssh para un host diferente, ¿repetiría lo mismo después de la primera? ¿El archivo de identidad pertenece al primer host anterior?
MikeSchem
ok, sí, parece que ese es el caso cyberciti.biz/faq/...
MikeSchem
68

La ejecución de ssh en modo detallado, también conocido como ssh -v user@host, imprimirá una gran cantidad de información de depuración, que también contiene detalles sobre qué archivos de claves está intentando iniciar sesión.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Ahora, si combina esto, con el Paso 4 en la propia página de ayuda SSH de Git , ssh -vT [email protected]puede darle la respuesta.

Nota: También puede usar el -iconmutador para decirle a ssh durante la ejecución del comando, qué archivo de claves usar.

Vajk Hermecz
fuente
1
También puede grep de la salida de error estándar del comando ssh para encontrar el archivo de clave de esta manera: ssh -vv user@host 2> >(grep Offering)- esto facilitará las cosas. El último archivo debe ser la clave pública. Por ejemplo:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
3
githubno es lo mismo que git.
ForeverWintr
9

A menos que se especifique en el .ssh/config, utilizará el archivo de clave privada predeterminado.

El archivo predeterminado es ~/.ssh/id_rsao ~/.ssh/id_dsao ~/.ssh/identitysegún la versión del protocolo.

Rodrigo Flores
fuente
¿Cuándo se agregan las claves a los hosts conocidos?
mountainLion
6

Diría que lo más práctico para mi gusto sería:

GIT_SSH_COMMAND='ssh -v' git …

por supuesto, dependiendo de las circunstancias, podría ser beneficioso exportarlo al entorno actual de SHELL para que no tenga que anteponerlo manualmente cada vez. Entonces sería de esta manera:

export GIT_SSH_COMMAND='ssh -v'
git …

- Como man gitsugiere, hay algunas variables ambientales que afectarían las operaciones de Git con el uso de SSH. Según man sshpuede obtener información de depuración al implementar la -vopción (no solo, sino también, consulte el manual si tiene curiosidad por obtener más información).

que clave se usa?

En la salida, verías algo como ...

debug1: Offering public key: …

… Que es la respuesta a tu qn.

poige
fuente
1
SI. Esta debería ser la respuesta aceptada. Para hacer que funcione en las ventanas CMD (uf), utilice: set GIT_SSH_COMMAND=ssh -v. Esto me ayudó a descubrir que ssh-config Inlcude-Path debería ser algo como esto en Windows: Include /C/Users/YourUserName.ssh/configpara hacer que ssh y, por lo tanto, git use un archivo de configuración que luego usa, por ejemplo, una HOST *entrada para especificar el archivo de identidad que usa git / ssh.
icyerasor
5

Dado que gitsolo se usa sshpara conectarse, usará la clave sshque usaría para conectarse al host remoto. Consulte el ~/.ssh/configarchivo para obtener más detalles; el hostbloque usa la IdentityFiledirectiva para especificar la clave privada a usar. La página de ssh_config(5)manual contiene todos los detalles.

sarnold
fuente
Hmm ... el archivo no existe en mi sistema. ¿Deberia?
James Raitsev
1
@JAM ¿Qué sistema operativo estás usando? Además, a veces el archivo de configuración está en/etc/ssh/ssh_config
Estoy en MACOS. Encontrado /etc/ssh_configque parece ser un archivo lleno de entradas comentadas
James Raitsev
@sarnold Podrías crear ~/.ssh/configtú mismo.
xdazz
4

Esto podría ser una gran ventaja, pero después de ejecutarlo ssh -vT [email protected]me mostró que estaba /root/.sshbuscando las claves, esperaba que verificara mi directorio de inicio y luego me di cuenta de que había iniciado sesión como root.

Moak
fuente
Esta técnica, entre otras la misma sshforma de interrogatorio son las soluciones correctas. Gracias.
eigenfield
1

En el servidor remoto, edite el archivo sshd_config y cambie LogLevel de INFO a VERBOSE y reinicie ssh.

Ahora su archivo de registro contendrá la huella digital de la clave que se utilizó para autenticar a cada usuario.

En Ubuntu, estos archivos son:

/etc/ssh/sshd_config
/var/log/auth.log

pero pueden ser diferentes en otra distribución. Solo busque en Google su ubicación (algunos usan / var / log / secure, por ejemplo).

seumasmac
fuente