macOS sigue preguntando mi frase de contraseña ssh desde que actualicé a Sierra

583

Solía ​​recordar la frase de contraseña, pero ahora me la pide cada vez.

He leído que necesito regenerar la clave pública con este comando, lo que hice:

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

Pero no solucionó nada.

¿Cómo puedo hacer que macOS recuerde mi frase de contraseña nuevamente?

erwan
fuente
Estoy experimentando un comportamiento relacionado: Anteriormente, el cuadro de diálogo del llavero aparecía para pedir la contraseña, ahora solo recibo el mensaje de la consola SSH normal. Probablemente se haya perdido parte del registro del programa auxiliar.
Daniel B
1
Han pasado años desde que generé mi id_rsa y nunca he usado una frase de contraseña y la uso para ssh en muchos servidores. ¿Realmente tengo una frase de contraseña, o es solo que Sierra cree que debería? Tenga en cuenta que $ cat ~ / .ssh / id_rsa | cabeza -2 ----- COMIENCE LA CLAVE PRIVADA DE RSA ----- Tipo de proceso: 4, ENCRIPTADA
Joe Murray
Si estás usando Pretzo y ninguna de estas respuestas resolvió tu problema: asegúrate de no tener el sshmódulo habilitado zpretzorc. De todos modos, no es necesario en macOS, y si está habilitado, le pedirá su contraseña incluso después de haberla agregado UseKeychain.
Jimothy
1
intente hacer ssh -v ...para ver si tiene alguna información útil de depuración ...
rogerdpack

Respuestas:

1124

En la última versión de macOS (10.12.2), esto es fácil de solucionar. Solo edita tu ~/.ssh/configy habilita la UseKeychainopción:

Host *
    UseKeychain yes

No hay necesidad de cambiar nada más. Ahora todo funciona como solía funcionar antes de las últimas actualizaciones. No es necesario agregar claves a ssh-agent.


Editar: es posible que aún deba ingresar su frase de contraseña una vez. Si no lo sabe, siga estas instrucciones para revelarlo.

Jukka Suomela
fuente
24
Esto me funcionó absolutamente. Todo a continuación parece más complicado que esta solución.
Br.Bill
81
Tenga en cuenta que el Host *bloque debe (casi) siempre colocarse al final de su ~/.ssh/configarchivo. Cuando sshbusca configuraciones, utiliza el primer valor que encuentra. Por lo tanto, al poner el bloque comodín al final, actúa como un conjunto de valores predeterminados; puede anular la configuración de hosts específicos al especificarlos anteriormente en el archivo.
Molomby
66
Esto también funcionó para mí, pero tuve que ingresar la frase de contraseña correctamente una vez. Hay otra respuesta que describe cómo puede ver la contraseña si no la recuerda.
FGreg
26
Si el archivo de configuración no existe, crear uno y agregar esto también funcionará.
wynshaft
66
No necesitas el Host *encabezado. Simplemente agregue la línea única UseKeychain yesen la parte superior de su .ssh/configsi desea que esto se aplique a todos los hosts.
sj26
183

Yo tuve el mismo problema. El llavero MacOS Sierra sigue pidiendo la frase de contraseña. Su id_rsa debe estar encriptada con una frase de contraseña por seguridad. Luego intente agregarlo al llaverossh-add -K ~/.ssh/id_rsa

Si su clave está en otra carpeta que no sea ~/.sshentonces, sustitúyala por la carpeta correcta.

Keychain ahora conoce tu clave ssh y, con suerte, todo funciona ahora (el mío sí)

Lars G.
fuente
25
Esto funciona pero parece que no persiste cuando reinicio mi computadora. ¿Alguien más tiene el mismo problema?
joshua.paling
1
Sí, el mismo problema aquí. @ joshua.paling
kingkool68
18
@ joshua.paling, kingkool68 - Apple ha eliminado la capacidad de recordar sus claves SSH durante el reinicio para cumplir con el comportamiento general de OpenSSH. Consulte esta pregunta para conocer otras formas de lograr la misma funcionalidad: apple.stackexchange.com/questions/254468/…
Evan Pon
@EvanPon Pero eso no funcionará con claves cifradas, ¿verdad?
Konrad Rudolph
2
@KonradRudolph funciona para mí. Llamar ssh-addcon la -Aopción buscará en el llavero de MacOS cualquier contraseña para las identidades en cuestión. Creo que le avisará si las contraseñas no están en el llavero.
Evan Pon
72

Esto solucionó mi problema similar:

/usr/bin/ssh-add -K

Esto almacena frases de contraseña en su llavero.

Actualización (gracias @EasyCo): esto funciona pero no persiste entre reinicios. @ solución de Jukka-Suomela en esta página no funciona en los reinicios. Puedes encontrar esa respuesta aquí:

https://superuser.com/a/1158050/234685

critikaster
fuente
3
Esto es lo único que funciona.
cryptic0
55
No necesitaba crear .ssh / .config al usar esta solución.
Shai
Esto funcionó para mí. No es necesario editar el archivo host. Estoy en sierra
cchiera
Esto funcionó para mí en Mac OS Sierra.
Dayron Gallardo
2
Como se indicó anteriormente, esto funciona pero no persiste entre reinicios. La solución de @ jukka-suomela funciona en todos los reinicios.
EasyCo
40

Solo tuve que ingresar la frase de contraseña correcta una vez y comenzó a funcionar. El problema era que no recordaba mi frase de contraseña SSH original, pero la recuperé siguiendo estos pasos desde Github:

  • En Finder, busque la aplicación Keychain Access.
  • En Keychain Access, busque SSH.
  • Haga doble clic en la entrada de su clave SSH para abrir un nuevo cuadro de diálogo.
  • Diálogo de acceso al llavero En la esquina inferior izquierda, seleccione Mostrar contraseña.
  • Se le pedirá su contraseña administrativa. Escríbalo en el cuadro de diálogo "Acceso a llavero".
  • Su contraseña será revelada.
Olli Jaakkola
fuente
2
No funciona Terminal todavía dice "malo frase de contraseña"
Jayden Lawson
18

Ninguna de las soluciones anteriores funcionó después de instalar Sierra sobre El Capitan en una nueva MacBook Pro. Sierra por diseño no guarda las claves SSH en el llavero.

Dos soluciones me funcionaron. Una es agregar el comando ssh-add -A &> /dev/nulla ~ / .bash_profile. Cada vez que abra la terminal, se ejecutará este comando (la &> /dev/nullparte envía la salida del comando al archivo / dev / null).

Una solución más complicada pero un poco más sofisticada es crear un plist con el comando que se ejecuta cada vez que el sistema operativo se inicia como se sugiere en Guardar claves SSH en el llavero macOS Sierra . Esto implica usar Xcode para crear el archivo.

Hank Snow
fuente
Esta parece ser también la respuesta oficial de Apple - ver openradar.appspot.com/27348363
Nick Maynard
La mejor solución hasta ahora para mí. Estoy usando Mac OSX Sierra (10.12.2).
zyc
15

Una solución es agregar lo siguiente a su archivo ~ / .ssh / config:

Host *
   AddKeysToAgent yes
   IdentityFile ~/.ssh/id_rsa
   UseKeychain yes

Tomado de: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ Ver también: https://apple.stackexchange.com/a/264974/3810

ThomasW
fuente
Hasta ahora, en ninguna de las respuestas, alguien ha mencionado el Bad configuration option: usekeychainerror que recibo con UseKeychain (sin embargo, está en mayúscula). Pero yo era capaz de conseguir que funcione simplemente mediante la eliminación de esa línea y dejando AddKeysToAgent y IdentityFile (que todavía tiene que introducir la contraseña la primera vez). Esto es con macOS Sierra 10.12.6.
William Turrell
esto funciona bien cuando estoy en la terminal y uso el comando ssh, pero otras aplicaciones, como WebStorm que usan su propia terminal, no toman esta configuración hasta que uso por primera vez un comando ssh en la terminal regular. entonces funciona en todas partes, ¿alguna sugerencia?
santiago arizti
@WilliamTurrell Si esto sigue sucediendo, escriba which sshpara asegurarse de que está utilizando /usr/bin/sshy no una versión de Fink o MacPorts, que estaría bajo algo como /usr/local/bin/ssho/opt/local/bin/ssh
Stefan Lasiewski
7

Esta mañana, tuve el mismo problema que tú después de actualizar a Sierra. En mi caso, el id_rsaarchivo estaba encriptado y después de descifrarlo funcionaba de maravilla.

  1. Verifique si su id_rsaarchivo está encriptado con el siguiente comando:cat ~/.ssh/id_rsa | head -2
  2. Si la segunda línea dice Proc-Type: 4,ENCRYPTED, está encriptada y podrías intentar descifrarla
  3. Importante: ¡haga una copia de seguridad de su id_rsaarchivo original ! Usa el comandocp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Descifra tu clave privada con openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Retire la clave original ( rm ~/.ssh/id_rsa) y reemplácela con la descifrada:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Después de estos pasos, debería poder usar ssh nuevamente.

Martijn Pieters
fuente
44
Si bien esa es una solución alternativa, no creo que realmente resuelva el problema del OP.
Daniel B
Esto funciona para mi. @DanielB, ¿cuál es el problema con hacer esto?
Dag Høidahl
77
@ DagHøidahl La clave ya no se cifrará. Se puede robar con derechos de usuario habituales, por lo que la encriptación es una obligación.
Daniel B
66
Esto elimina la contraseña de la clave, razón por la cual funciona alrededor del problema del OP. Pero lo recomiendo en contra de esto. La contraseña es todo lo que impide que las personas usen su clave cuando se la roban. Dado que su clave probablemente le dará acceso a múltiples sistemas, no desea debilitarla.
Martijn Heemels el
5

Intenté varias respuestas aquí, pero todavía tenía problemas con el paso de claves remotas (como cuando usaba capistrano). Para resolverlo, leí la nota técnica de Apple e hice de este mi archivo de configuración. ¡No más preguntas por mi contraseña!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Diosa geek
fuente
3

También tuve este problema al intentar implementar algún código usando Capistrano . Muy frustrante. Aquí hay dos métodos que conozco para tratar este problema.

Método 1: agregue todas las claves conocidas al agente SSH.

Entonces, una solución que encontré es ejecutar ssh-addcon la -Aopción, que agrega todas las identidades conocidas al agente SSH usando cualquier frase de contraseña almacenada en su llavero, como esta:

ssh-add -A

Ahora esto funciona pero no persistirá entre reinicios. Entonces, si no quiere preocuparse nunca más por esto, simplemente abra el ~/.bash_profilearchivo de su usuario de esta manera:

nano ~/.bash_profile

Y agregue esta línea al final:

ssh-add -A 2>/dev/null;

Ahora, cuando abras una nueva ventana de Terminal, ¡todo debería estar bien!

Método 2: agregue solo las claves SSH que están en el llavero al agente.

Entonces, aunque la ssh-add -Aopción debería funcionar para la mayoría de los casos básicos, recientemente me encontré con un problema en el que tenía 6-7 cajas Vagabundos (que usan claves / identidades SSH para acceder) configuradas en una máquina además de las más comunes id_rsa.pub.

En pocas palabras, terminé bloqueado de un servidor remoto debido a demasiados intentos fallidos basados ​​en claves / identidades SSH ya que el acceso al servidor se basó en una contraseña y las claves / identidades SSH son claves / identidades SSH. Entonces, el agente SSH probó todas mis claves SSH, falló y ni siquiera pude acceder a la solicitud de contraseña.

El problema es que ssh-add -Asolo agregará arbitrariamente cada clave / identidad SSH que tenga al agente, incluso si no es necesario hacerlo; como en el caso de las cajas Vagrant.

Mi solución después de muchas pruebas fue la siguiente.

Primero, si tiene más claves / identidades SSH agregadas a su agente de las que necesita, como se muestra con, ssh-add -lentonces purgue todas del agente de la siguiente manera:

ssh-add -D

Una vez hecho esto, inicie el agente SSH como un proceso en segundo plano así:

eval "$(ssh-agent -s)"

Ahora, se pone raro y no estoy muy seguro de por qué. En algunos casos, puede agregar específicamente la ~/.ssh/id_rsa.pubclave / identidad al agente de la siguiente manera:

ssh-add ~/.ssh/id_rsa.pub

Escriba su frase de contraseña, presione Returny debería estar listo para comenzar.

Pero en otros casos, simplemente ejecutar esto es suficiente para agregar la clave / identidad:

ssh-add -K

Si todo funcionó, escriba ssh-add -ly debería ver una sola clave / identidad SSH en la lista.

¿Todo bien? Ahora abre tu .bash_profile:

nano ~/.bash_profile

Y agregue esta línea al final; comente o elimine la -Aversión si la tiene:

ssh-add -K 2>/dev/null;

Eso permitirá que la clave / identidad SSH se vuelva a cargar en el agente SSH en cada inicio / reinicio.

ACTUALIZACIÓN: Apple ahora ha agregado una UseKeychainopción a las opciones de configuración SSH abiertas y también considera ssh-add -Auna solución.

A partir de macOS Sierra 10.12.2, Apple (supongo) ha agregado una UseKeychainopción de configuración para configuraciones SSH. La comprobación de la página de manual (vía man ssh_config) muestra la siguiente información:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

Lo que se reduce a que Apple vea que la solución se agrega ssh-add -Aa la .bash_profile suya como se explica en este boleto de Open Radar o se agrega UseKeychaincomo una de las opciones en cada usuario ~/.ssh/config.

JakeGould
fuente
3

La respuesta de Jukka Suomela es correcta, pero si está utilizando opensshinstalado desde homebrew, entonces también debe desinstalarlo con:

brew remove openssh

... para volver al sistema predeterminado openssh, porque el homebrew no admite la UseKeychainentrada de configuración ssh.

Greg Dubicki
fuente
1
Si alguien lo quiere con homebrew's, envíeme un ping aquí: github.com/rdp/homebrew-openssh-gssapi
rogerdpack
1

Intenté todas las soluciones sugeridas aquí, pero no tengo un llavero configurado en mi Mac.

Agregarme a la siguiente línea en el .ssh/configarchivo superior tanto en la máquina local como en la remota funcionó para mí.

PubkeyAcceptedKeyTypes=+ssh-dss 
Roei Bar Aviv
fuente
1

Necesita .plistagregar un archivo ~/Library/LaunchAgents/para ejecutarse ssh-add -Aen cada inicio de macOS.

Hay un solo comando que hace esto (de SSH-keys-in-macOS-Sierra-keychain ) que es:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
AlecRust
fuente