¿Son intercambiables las claves GPG y SSH?

70

Quiero generar una RSAclave GPGy usarla en el SSHinicio de sesión. ¿Es esto posible? ¿Si es así, cómo?

editar: ver la respuesta de @ wwerner, no lo intenté, pero parece ser la solución actual (a partir de 2018)

destan
fuente

Respuestas:

26

Sé que esta es una publicación antigua, pero para personas como yo tropezamos con esto:

Ahora es (ya que gpg 2.1) posible simplemente extraer las claves ssh directamente usando gpg: gpg --export-ssh-key <key id>!.

La !marca es opcional, hace que la clave principal se pueda exportar y omite verificar si la clave tiene capacidad de autenticación ([CA]).

Detalles:

wwerner
fuente
Esta respuesta debe ser la aceptada. :)
Inkeliz
30

Estoy investigando sobre este tema y puedo darte algunas pistas, pero todavía no he encontrado una manera de hacerlo funcionar.

Monosfera

Monkeysphere parece un proyecto muy interesante, pero no he podido compilarlo en Mac OS X sin obstruir mi pequeño espacio libre en disco con MacPorts.

Usando gpgkey2ssh

La primera forma en que le sugiero que intente es generar una entrada compatible de claves autorizadas a partir de su ID de clave (por ejemplo, BFB2E5E3) con

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

Aquí lo agregué a mi localhost ya que ejecuté un servidor ssh para fines de prueba, pero, por supuesto, debe agregar esto al host de destino ~/.ssh/authorized_keys. A continuación, debe indicarle a SSH que use la parte privada de esta clave durante la autenticación, pero simplemente no funciona exportar una versión blindada ASCII del par de claves:

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

Usando gpg-agent

gpg-agenttiene la opción --enable-ssh-supportque le permite usarlo como un reemplazo directo para los conocidos ssh-agent. He leído sobre algunas personas que intentan agregar a través de ssh-addsu clave GPG después de iniciar de gpg-agentesta manera:

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

Pero no creo que esto funcione nunca. La página de manual de gpg-agent dice:

Las claves SSH, que se utilizarán a través del agente, deben agregarse al agente gpg inicialmente a través de la utilidad ssh-add. Cuando se agrega una clave, ssh-add solicitará la contraseña del archivo de clave proporcionado y enviará el material de la clave sin protección al agente; esto hace que el agente gpg solicite una frase de contraseña, que se utilizará para cifrar la clave recién recibida y almacenarla en un directorio específico del agente gpg.

Parece que gpg-agentdebería usarse como una medida adicional para proteger sus claves SSH con un cifrado GPG.

Convertir una clave GPG a OpenSSH

Jérôme Pouiller en su blog escribe que la utilidad Gpgsm puede exportar claves y certificados en PCSC12; entonces pueden ser utilizados por OpenSSH:

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

Pero no he encontrado una manera de gpgsmaceptar mis pares de llaves gpg.

Otras cosas que puedes probar

SSH tiene una -Iopción para especificar la biblioteca compartida PKCS # 11 que sshdebe usar para comunicarse con un token PKCS # 11 que proporciona la clave RSA privada del usuario. ssh-keygenpuede usar la clave pública o privada RFC4716 / SSH2, las claves públicas PEM PKCS8 y las claves públicas PEM para generar una clave privada (o pública) compatible con OpenSSH usando las opciones -iy -m.

Aún así no puedo encontrar una manera de poner todo junto.

Claudio Floreani
fuente
55
Tenga en cuenta que gpgkey2sshha sido reemplazado por la --export-ssh-keyversión 2.1.11 (2016-01-26). Me tomó un tiempo darme cuenta de esto. El uso es gpg --export-ssh-key BFB2E5E3.
MayeulC
Hay una buena publicación en Linode pero usaron gpg-agent para autenticarse con SSH. No convierten la clave secreta gpg en una clave privada SSH.
Xorax
14

No, no son intercambiables. Sí, es posible usar claves GPG para la autenticación: el paquete Monkeysphere tiene herramientas para extraer el par de claves RSA sin formato de su certificado GPG.

  1. Su certificado GPG necesitará una subclave con el indicador de capacidad de "autenticación". Para crear una subclave, ejecute una vez:

    monkeysphere g
    
  2. Ahora agregue sus subclaves de autenticación a ssh-agent :

    monkeysphere s
    

Algo relevante: este hilo de gnupg-users .

Gravedad
fuente
9

Con la información de las respuestas a esta pregunta y la ayuda de la lista de correo gnupg-users pude descubrir cómo usar mi clave GPG para la autenticación SSH. Como ya mencionó Claudio Floreani en su respuesta, hay algunos métodos posibles para hacer esto.

He escrito una entrada de blog sobre algunas posibles soluciones: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Para resumir: o usas GnuPG 2.1, que actualmente está en versión beta. Al usar esta versión, simplemente puede iniciar gpg-agent con la opción --enable-ssh-support y agregar el keygrip para su clave GPG (o subclave) en ~ / .gnupg / sshcontrol.

Cuando usa la versión actual estable de GnuPG (2.0.x), puede usar monkeysphere para agregar su clave a gpg-agent (nuevamente, después de iniciar gpg-agent con la opción --enable-ssh-support).

También es posible usar el llavero GNOME (o incluso el agente ssh regular) con la ayuda de monkeysphere. El único problema en este caso es que tendrá que volver a agregar su clave cuando vuelva a iniciar sesión (en Gnome o XFCE). Para resolver esto, puede exportar manualmente su clave y convertirla.

jeroen
fuente