No se puede desbloquear la clave SSH protegida con contraseña en OS X Mavericks

Acabo de actualizar a OSX 10.9, y cuando intento establecer una conexión SSH con autenticación de clave pública, aparece un mensaje que solicita la contraseña de mi clave SSH.

Inicialmente pensé que la actualización hacía que el llavero olvidara algunas contraseñas, así que volví a ingresar la mía. Aparentemente, esa no fue la causa, porque el aviso seguía reapareciendo.

Primero pensé que podría estar usando la contraseña incorrecta, pero mientras ejecutaba el siguiente comando:

$ ssh-keygen -vvv -y -f id_rsa >| id_rsa.pub
debug3: Incorrect RSA1 identifier
debug1: key_parse_private_pem: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase:
debug3: Incorrect RSA1 identifier
debug1: key_parse_private_pem: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
load failed

...¡No funciona! Si trato de usar openssl:

$ openssl rsa -in id_rsa -text
Enter pass phrase for id_rsa:
Private-Key: (2048 bit)
modulus:
    00:...

mi clave privada se descifra correctamente y se imprime toda la información.

¿Qué pasó con la actualización a Mavericks? ¿Cómo puedo recuperar mi clave privada en un estado utilizable?

Respuestas (7)

Aparentemente, la clave privada que estaba usando en mi máquina era antigua. Mi clave no contenía la información de cifrado agregada al archivo de clave privada si genero una nueva:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-...

Para resolver el problema, descifré la clave con openssl:

$ cd ~/.ssh
$ cp id_rsa id_rsa.bck
$ openssl rsa -in id_rsa -out id_rsa

... y luego lo volvió a cifrar:

$ openssl rsa -in id_rsa -aes256 -out id_rsa
$ chmod 0600 id_rsa

Y por si acaso, regenera también la clave pública:

$ ssh-keygen -y -f id_rsa > id_rsa.pub

Yo tuve el mismo problema. Lo resolví moviendo .ssh/authorized_keys2 a .ssh/authorized_keys.

El archivo /etc/sshd_config contiene explícitamente estas líneas:

\# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
\# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

¿Este es un cambio de la versión anterior de macosx?

Este problema también es diferente. En mi caso no pude descifrar mi clave privada.

El uso de brew openssl y openssh soluciona el problema de PCKS#8 en Mavericks.

brew update
brew install openssl
brew link openssl --force
brew install openssh

# confirm correct bins are being used
# both should be located in /usr/local/bin
which openssl
which openssh

# add key back to keychain
ssh-add ~/.ssh/id_rsa

No estoy seguro de si la vinculación forzada de openssl rompe algo en Mavricks. Hasta ahora, no he notado ningún problema.

Mismo problema aquí, mis llaves muestran el mismo comportamiento.

Rastreé el problema hasta esta publicación de blog. Modifiqué mis teclas ssh de la forma en que se describe en este artículo para aumentar la seguridad y funcionó bajo Mountain Lion. http://martin.kleppmann.com/2013/05/24/mejorando-la-seguridad-de-ssh-private-keys.html

Supongo que Apple cambió algo con openssh y la versión "nueva" no es capaz de leer el formato PKCS # 8 más nuevo.

Mi versión Mavericks OpenSSH:OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011

No tengo otra Mac, así que no puedo compararla con la versión de Mountain Lion.

/usr/bin/ssh -Vimprime OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011en mi VM 10.8.0.
Interesante, si tiene tiempo, ¿puede verificar qué muestra "ssh-keygen -vvv -y -f id_rsa" si usa una clave pkcs # 8?
Mi clave pkcs #8, derivada a través de ese mismo enlace, muestra esto: gist.github.com/cbowns/7359383/raw/…

Pude solucionar este problema simplemente haciendo lo siguiente:

cd ~/.ssh
mv known_hosts known_hosts.old

Ahora ve y conéctate. Cuando hace la pregunta estándar para agregar el tipo de huella digital, sí.

¡Pero no te olvides de comprobar la huella dactilar!
Este es un problema diferente de lo que estaba preguntando. El archivo de hosts conocidos no tiene nada que ver con el problema encontrado aquí (descifrado de la clave privada)

Pasó a tener este problema. Al tratar de especificar el cifrado, pude hacer que funcionara bien.

En Linux, cuando intente generar pares de claves, use esto:

ssh-keygen -t rsa -Z aes256

La clave pública ahora con cifrado aes256 puede ser reconocida correctamente por ssh en OSX (aquí, la mía es 10.12.1).

Puede convertir una clave PuTTY en una clave OpenSSL OS X:

puttygen putty.ppk -O private-openssh -o osx.key

Escriba la frase de contraseña y ya está.