895 votes

Comment puis-je ajouter de façon permanente ma clé privée SSH à Keychain afin qu'elle soit automatiquement disponible pour ssh ?

Il semble que ssh-add -K ~/.ssh/id_rsa chargera votre clé mais vous demandera le mot de passe à chaque redémarrage.

Je cherche une solution qui ne m'obligerait pas à saisir à nouveau le mot de passe clé entre deux connexions.

1 votes

Pouvez-vous en dire un peu plus sur le moment où l'invite de mot de passe s'affiche pour vous ? Je demande cela parce que j'ai une clé ssh pour un serveur distant, qui, je vous l'assure, n'est pas la même que mon mot de passe de connexion Mac ou autre, et je n'ai pas eu à entrer le mot de passe de la clé ssh depuis années . Je peux simplement ouvrir un terminal, taper "ssh <server>", et j'y suis. Je pense que j'ai d'abord configuré cette clé sous OSX 10.5. id_dsa, mais je pense que cela ne devrait pas avoir d'importance.

0 votes

Mon id_rsa a un mot de passe.

0 votes

J'ai aussi le problème suivant : j'ai résolu ce problème il y a si longtemps que je ne me souviens plus exactement de ce que j'ai fait. Mais je pensez à l'idée est de no exécuter ssh-add mais il suffit d'exécuter ssh directement. Une fenêtre devrait s'ouvrir, contenant la phrase de passe de la clé et une case à cocher permettant de la stocker dans votre trousseau.

1336voto

user38290 Points 131

Il n'est pas possible d'ajouter la clé privée au trousseau, mais vous pouvez stocker la phrase de passe pour la clé privée dans le trousseau. Sous OSX, la fonction native ssh-add a un argument spécial pour enregistrer la phrase de passe de la clé privée dans le trousseau OSX, ce qui signifie que votre connexion normale la déverrouillera pour l'utiliser avec ssh. Sur OSX Sierra et les versions ultérieures, vous devez également configurer SSH pour qu'il utilise toujours le trousseau (voir l'étape 2 ci-dessous).

Vous pouvez également utiliser une clé sans phrase de passe, mais si vous préférez la sécurité, c'est certainement acceptable avec ce flux de travail.

Étape 1 - Stocker la phrase de passe dans le trousseau de clés

Dans la dernière version de MacOS (12.0 Monterey), faites-le une seule fois :

ssh-add --apple-use-keychain ~/.ssh/[your-private-key]

Ou dans les versions de MacOS antérieures à 12.0 Monterey, utilisez :

ssh-add -K ~/.ssh/[your-private-key]

Entrez la phrase de passe de votre clé, et elle ne vous sera plus demandée.

(Si cela échoue, assurez-vous que vous utilisez la version d'Apple de /usr/bin/ssh-add et non quelque chose d'installé avec brew etc. ; vérifiez avec which ssh-add )

Étape 2 - Configurer SSH-agent pour qu'il utilise toujours le trousseau de clés

(Note : Dans les versions d'OSX antérieures à Sierra, ceci n'est pas nécessaire)

Il semble qu'OSX Sierra ait supprimé la possibilité pratique de conserver vos clés entre les connexions, et la mise à jour de ssh n'utilise plus le trousseau par défaut. Pour cette raison, vous devez changer une chose de plus pour sécuriser le stockage persistant des clés.

La solution est décrite dans ce commentaire sur le fil de discussion github . Voici ce que vous devez faire :

  1. Assurez-vous que vous avez effectué l'étape 1 ci-dessus pour stocker la phrase de passe dans le trousseau.

  2. Si vous ne l'avez pas encore fait, créez un ~/.ssh/config fichier. En d'autres termes, dans le .ssh dans votre répertoire personnel, créez un fichier appelé config .

  3. Dans ce .ssh/config ajoutez les lignes suivantes :

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

    Changement ~/.ssh/id_rsa au nom de fichier réel de votre clé privée. Si vous avez d'autres clés privées dans votre ~/.ssh ajoutez également un IdentityFile pour chacun d'entre eux. Par exemple, j'ai une ligne supplémentaire qui se lit comme suit IdentityFile ~/.ssh/id_ed25519 pour une deuxième clé privée.

    El UseKeychain yes est la partie clé, qui indique à SSH de chercher la phrase de passe de la clé dans votre trousseau OSX.

  4. C'est ça ! La prochaine fois que vous lancerez une connexion ssh, elle essaiera les clés privées que vous avez spécifiées et cherchera leur phrase de passe dans le trousseau d'OSX. Il n'est pas nécessaire de taper la phrase de passe.

2 votes

Ça a presque marché pour moi. Le verrouillage automatique était déjà désactivé dans mon trousseau de clés "login". La réponse de Matthew Sanabria ne s'appliquait donc pas. Utilisation de ssh-add -K ... a ajouté les clés à l'agent ssh sans demander de mot de passe, mais seulement pour la session en cours. Après un redémarrage, j'ai dû relancer la commande.

1 votes

D'une manière ou d'une autre, je fais le ssh-add -K et cela fonctionne pendant un certain temps puis, soudainement, on me demande à nouveau un mot de passe. Je ne sais pas si cela a à voir avec iterm ou avec mes mises à jour de zsh ?

8 votes

@Poulsbo & @Abram -- voir ma mise à jour, Sierra a changé le comportement automatique et maintenant vous devez exécuter ssh-add -A manuellement pour charger votre trousseau enregistré. Quelques solutions possibles référencées ci-dessus.

58voto

user2688272 Points 511

J'ai eu un problème similaire, dans la mesure où on m'a demandé à chaque fois pour ma phrase de passe de clé publique. Selon la suggestion de l'utilisateur "trisweb" ci-dessus, j'ai activé ces options pour ~/.ssh/config :

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

Mais il y a toujours un message à chaque fois que je veux utiliser ssh. Finalement, j'ai activé ssh -v et j'ai trouvé cette ligne de débogage :

debug1: key_load_private: incorrect passphrase supplied to decrypt private key

J'ai ensuite ouvert mon trousseau dans "Keychain Access.app", trouvé la clé nommée "SSH : /Users/username/.ssh/id_rsa" et l'ai ouverte. J'ai cliqué sur "Show password" pour dévoiler le mot de passe et j'ai effectivement constaté que la phrase de passe dans le trousseau était une ancienne phrase de passe. J'ai mis à jour la phrase de passe dans Keychain Access, et maintenant l'absence de mot de passe fonctionne.

J'aurais aussi pu mettre à jour la phrase de passe avec cette phrase :

ssh-keygen -p -f ~/.ssh/id_rsa

0 votes

Dans mon Mac, le mot de passe est enregistré dans la catégorie "password" de la chaîne "iCloud". Je pensais qu'il se trouvait dans la chaîne "log in".

38voto

Andrew Points 381

À tous ceux pour qui les solutions ci-dessus n'ont pas fonctionné, il semble que mon problème soit dû au fait que je dupliquais le processus d'authentification. UseKeychain yes & AddKeysToAgent yes dans tous les profils / raccourcis de clés ssh. J'ai mis à jour mon ~/.ssh/config pour ne les déclarer qu'une seule fois et ils se chargent maintenant tous lors de la connexion sans demander de mot de passe au démarrage, par ex :

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

########################
# Keep the default configuration 
#  as the last item in this file
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

5 votes

Je recommande Host * être après des règles spécifiques de l'hôte. Voir man ssh_config pour les détails.

1 votes

Merci beaucoup pour cela. Où se trouve la documentation à ce sujet, c'est-à-dire comment avez-vous procédé ?

1 votes

...en fait, cela n'a pas fonctionné pour moi : J'ai une configuration où Host bar a aussi le HostName foo.com (c'est-à-dire deux configurations différentes pour le même site). IdentityFile ~/.ssh/foo a toujours été utilisé. Pour corriger, j'ai dû déplacer la section Host * vers le bas, comme le suggère @FranklinYu. Je pense que c'est parce que > Pour chaque paramètre, la première valeur obtenue sera utilisée. linux.die.net/man/5/ssh_config

21voto

JacquesB Points 19878

De même, dans MacOS Sierra et High Sierra (je ne sais pas pour les versions précédentes), l'exécution de la commande ssh-add -A permettra à l'agent de charger toutes les clés dont la phrase de passe est stockée dans le trousseau... Donc très pratique

Notez que ces drapeaux d'option ont été renommés et que les anciens ont été dépréciés. dans les versions ultérieures de MacOS. Depuis le ssh page de manuel :

APPLE_SSH_ADD_BEHAVIOR
Active ou désactive l'ancien traitement des l'adresse -A y -K utilisées dans les versions antérieures de MacOS. Ces options ont été renommées --apple-load-keychain y --apple-use-keychain respectivement.
Cependant, -A y -K toujours se comporter comme dans les versions précédentes sauf dans les circonstances suivantes :

  • Si un fournisseur de sécurité était spécifié avec -S ou SSH_SK_PROVIDER, ou si APPLE_SSH_ADD_BEHAVIOR a la valeur "openssh". est défini comme ayant la valeur "openssh", alors ssh-add utilise le standard OpenSSH le comportement -A n'est pas reconnu et l'option -K se comporte comme documenté dans la section DESCRIPTION ci-dessus.
  • Autrement, ssh-add -A y -K se comportera comme dans les versions antérieures de MacOS. Un avertissement sera émis sur l'erreur standard à moins que APPLE_SSH_ADD_BEHAVIOR ne prenne la valeur "MacOS". Remarque : Futur Les futures versions de MacOS ne supporteront ni -A ni -K sans régler cette variable d'environnement.

0 votes

Ce n'est pas nécessaire si l'on se contente de configurer ssh correctement, comme le prévoit la réponse acceptée.

20voto

Greg Kaleka Points 171

Réponse sur OSX 12.0 Monterey

Vous pouvez maintenant utiliser le drapeau --apple-use-keychain pour accomplir exactement cela.

ssh-add --apple-use-keychain ~/.ssh/id_rsa 

Ajoutez ceci à votre .zshrc o .bashrc pour qu'il soit chargé à partir de votre trousseau de clés lors de nouvelles connexions / instances de terminal.

Cela remplace le -K y -A drapeaux :

WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.

2 votes

C'est redondant si l'on configure correctement ssh. une fois conformément à la réponse acceptée.

0 votes

Cette option n'existe plus...

0 votes

@airtonix quelle version du système d'exploitation utilisez-vous ? Cela fonctionne bien pour moi sur 12.1.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X