Tengo que ejecutar este comando desde que actualicé a macOS:
ssh-add -K
Corrige el problema después del reinicio, pero tengo que ejecutar este comando cada vez que inicio sesión en mi computadora.
Si no ejecuto el comando anterior, ~/.ssh
se omiten mis claves y se me solicita la contraseña del servidor para establecer la conexión.
A partir de macOS Sierra 10.12.2, Apple agregó una ssh_config
opción llamada UseKeychain
que permite una resolución "adecuada" del problema. Agregue lo siguiente a su ~/.ssh/config
archivo:
Host *
AddKeysToAgent yes
UseKeychain yes
Desde la ssh_config
man
página en 10.12.2:
UsarLlavero
En macOS, especifica si el sistema debe buscar frases de contraseña en el llavero del usuario cuando intenta usar una clave en particular. Cuando el usuario proporciona la frase de contraseña, esta opción también especifica si la frase de contraseña debe almacenarse en el llavero una vez que se haya verificado que es correcta. El argumento debe ser 'sí' o 'no'. El valor predeterminado es 'no'.
ssh-add -K [path to key]
a a, .bash_profile
ya que ambos métodos requieren un nivel de modificación de archivos por parte del usuario en una cuenta de usuario que nunca se necesitó en el pasado para lograr la misma funcionalidad.IdentityFile ~/.ssh/id_rsa
es redundante y no es necesario (al mirar las opciones predeterminadas). Nunca configuré esa opción en mi archivo de configuración ssh.~/.ssh/config~
es preferible ya que resuelve el problema en el ssh
nivel. No estoy 100% seguro de que el .bash_profile
mod funcione para clientes GUI que usan ssh sin usar un shell.id_rsa
en esta respuesta es confusa.IdentityFile
opción de la respuesta porque no es obligatoria.IgnoreUnknown UseKeychain
para compatibilidad cruzada con LinuxUseKeychain yes
al archivo .ssh/config para cada clave es un método mejor que usar ssh-add
: 1. Es compatible y recomendado. 2. No se basa en el shell como agregar a .bash_profile
lo haría. 3. Le permite no agregar automáticamente la frase de contraseña para una clave particularmente sensible. 4. Si agrega una nueva clave, es probable que deba editar el config
archivo de todos modos, para que pueda hacer todo en un solo lugar.UseKeychain yes
hace que la frase de contraseña se guarde en los reinicios (es decir, se escriba en el disco)? Si es así, ¿hay alguna manera de evitar que esto suceda? No veo cómo es una buena idea guardar una frase de contraseña SSH en una ubicación potencialmente menos segura.UseKeychain yes
significa). Los llaveros de macOS están encriptados de forma segura. Si no desea que se guarden en el llavero, configure esta opción en no, pero obviamente las frases de contraseña no se conservan en los reinicios, que es de lo que se trata esta pregunta.Host *
línea anterior es innecesaria. Cualquier opción que no esté bajo Host
se considerará configuración global.También tuve este problema al intentar implementar un código usando Capistrano . Muy frustrante. Aquí hay dos métodos que conozco para lidiar con este problema.
Entonces, una solución que encontré es ejecutar ssh-add
con la -A
opció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á en los reinicios. Entonces, si no quiere volver a preocuparse por esto, simplemente abra el ~/.bash_profile
archivo de su usuario de esta manera:
nano ~/.bash_profile
Y añade esta línea al final:
ssh-add -A 2>/dev/null;
Ahora, cuando abra una nueva ventana de Terminal, ¡todo debería estar bien!
Entonces, si bien la ssh-add -A
opció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 Vagrant (que usan claves/identidades SSH para el acceso) configuradas en una máquina además de las más comunes id_rsa.pub
.
Para resumir, terminé sin acceso a un servidor remoto debido a demasiados intentos fallidos basados en claves/identidades SSH, ya que el acceso al servidor se basaba 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 -A
simplemente 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.
En primer lugar, si tiene más claves/identidades SSH añadidas a su agente de las que necesita, como se muestra ssh-add -l
, elimínelas 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
clave/identidad al agente de la siguiente manera:
ssh-add ~/.ssh/id_rsa
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 eso funcionó, escriba ssh-add -l
y debería ver una sola clave/identidad SSH en la lista.
¿Todo está bien? Ahora abre tu .bash_profile
:
nano ~/.bash_profile
Y agregue esta línea al final; comente o elimine la -A
versión si tiene eso en su lugar:
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.
UseKeychain
opción a las opciones de configuración de SSH abiertas y ssh-add -A
también considera una solución.A partir de macOS Sierra 10.12.2, Apple agregó una UseKeychain
opción de configuración para configuraciones SSH. Al consultar la página del manual (a través man ssh_config
de ) se 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 ve la solución como una adición ssh-add -A
a su cuenta .bash_profile
, como se explica en este ticket de Open Radar, o UseKeychain
como una de las opciones por usuario ~/.ssh/config
.
ssh-add -K [path to key]
e ingrese pw cuando se le solicite. El llavero almacenará la contraseña y ssh-add la obtendrá desde allí después de eso.UseKeychain
y AddKeysToAgent
agregue automáticamente sus claves desde su ssh_config. No se necesitan secuencias de comandos de shell. Consulte la respuesta de @mluisbrown a continuación para obtener la información actualizada para 10.12.2~/.ssh/config
configuración para agregar 4 líneas de configuración o agregar una línea ssh-add -K [path to key]
a un .bash_profile
, ninguna solución es ideal. El escenario ideal es una actualización a macOS 10.12.2 que eliminaría la necesidad de realizar cualquier modificación de cualquier configuración manualmente para lograr esta funcionalidad básica y esperada.ssh-add -A
su script rc si desea que sus claves estén siempre cargadas". ¯\_(ツ)_/¯
ssh-add -A
no funciona en Mojave (10.14.6 (18G4032)), con ssh-add nuevo (/usr/local/Cellar/openssh/8.3p1/bin/ssh-add). Parece que está funcionando con estos 2 (usando el nuevo ssh-add): ssh-add -K ~/.ssh/id_rsa
entoncesssh-add ~/.ssh/id_rsa
/usr/bin/ssh-add
y no algo instalado por homebrew, conda, etc. (Compruebe which ssh-add
para estar seguro).Como se explica aquí , este es el método recomendado desde macOS 10.12.2 :
Agregue las siguientes líneas a su ~/.ssh/config
archivo:
Host *
UseKeychain yes
AddKeysToAgent yes
Cualquier clave que agregue al ssh-agent usando el ssh-add /path/to/your/private/key/id_rsa
comando se agregará automáticamente al llavero y debería cargarse automáticamente al reiniciar.
Estoy agregando esta respuesta porque:
IdentityFile ~/.ssh/id_rsa
línea, pero esa opción no es necesaria para cargar automáticamente las claves (y en realidad vinculará esa clave en particular para la sección de host a la que la agrega, lo que no querrá si usa diferentes claves para calores diferentes).UseKeychain
, pero eso no es suficiente para conservar las claves ssh-agent
después de un reinicio.ssh-add -L
y se informará The agent has no identities
. No habrá nada allí hasta que te conectes. ¡ Las AddKeysToAgent
claves no persisten entre reinicios de ninguna manera!He escrito una breve publicación sobre este tema que podría ayudarte.
Una solución es llamar ssh-add -A
al comando en cada inicio.
Simplemente agregue .plist
un archivo con el siguiente contenido a la ruta ~/Library/LaunchAgents/
o cree uno con la aplicación Lingon :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ssh-add-a</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->
Desde macOS 10.12.2 puedes usar la UseKeychain
opción. Lea más aquí o busque en man ssh_config
.
UseKeychain
On macOS, specifies whether the system should search for passphrases in the user's keychain
when attempting to use a particular 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''.
Así que solo haz lo siguiente:
echo "UseKeychain yes" >> ~/.ssh/config
>>
está en riesgo si ingresa el comando varias veces. Mejor haga una edición manual del archivo, como se describe en mluisbrown answer o ChrisJF answer .Tuve este problema antes y encontré una manera de evitarlo. Acabo de crear un archivo llamado config
en mi ~/.ssh
carpeta, donde agregué las siguientes líneas:
Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes
No estoy seguro de por qué, pero Host
ambos HostName
son importantes. En mi caso, si uno de ellos no estaba presente, la solución no funcionó.
Luego, acabo de hacer un ssh-add -K
y estaba funcionando incluso después del reinicio.
Si está utilizando una versión diferente de ssh (por ejemplo, instalada a través de homebrew), las soluciones anteriores no funcionarán de inmediato. Por ejemplo, AddKeysToAgent yes
y UseKeychain yes
en el .ssh/config
archivo no son reconocidos por versiones ssh que no sean de Apple y provocarán un error. Lo mismo para la opción -A
u para el cliente.-K
ssh
Eso significa que la respuesta de @mluisbrown no funcionará en absoluto. Puede usar el método 1 de la respuesta de @ Giacomo1968 y usar explícitamente la utilidad macOS ssh-add
en su .bash_profile
para agregar todas las claves al llavero, es decir:
/usr/bin/ssh-add -A
Como se menciona en un comentario anterior , es posible que primero deba agregar una clave al llavero: por ejemplo/usr/bin/ssh-add -K .ssh/github
Encontré que ssh-add -K
me dio " opción ilegal - K ". Esto se debió a que ssh-add era una versión extraña proveniente de /usr/local/bin (¿instalada por brew?). Pude agregar la clave mediante el uso específico de ssh-add ubicado en /usr/bin:
/usr/bin/ssh-add -K ~/.ssh/id_rsa
Modificar ~/.ssh/config para agregar UseKeyChain para todos los hosts es suficiente para detener esta pesadilla recurrente;)
Host *
UseKeychain yes
Si el archivo está vacío o no existe, simplemente cree y/o agregue la configuración anterior.
Actualicé a Mac OS X Sierra (10.12.6). Podría ssh en otros hosts pero no en github.com.
Esto es lo que tuve que insertar en ~/.ssh/config:
PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa
Después de ese cambio, podría usar github como antes.
Hay una pregunta similar respondida en este hilo en Askubuntu. Encontré una gran solución para eso al agregar un complemento para el shell oh-my-zsh al que cambié desde bash.
modius
$ ssh-add -K
me dassh-add: illegal option -- K
misaligar
-K
. Consulte la respuesta de @JakeGould para obtener una resolución.Extraño caminante
ben creasy
mforbes
ssh-add
: Debería ser/usr/bin/ssh-add
, no algo instalado por homebrew, conda, etc.