web-dev-qa-db-fra.com

ssh-add n'est pas persistant entre les redémarrages

J'ai ajouté une clé ssh à l'agent en:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Après un redémarrage, l'agent n'a plus cette clé ajoutée:

$ ssh-add -l
The agent has no identities.

Pourquoi est-ce arrivé?

160
アレックス

L'ajout de clés à l'agent est transitoire. Ils ne durent que tant que l'agent est en cours d'exécution. Si vous le tuez ou redémarrez votre ordinateur, ils sont perdus jusqu'à ce que vous les ajoutiez à nouveau. Du ssh-agent page de manuel:

ssh-agent est un programme qui contient des clés privées utilisées pour l'authentification par clé publique (RSA, DSA, ECDSA). L'idée est que ssh-agent est démarré au début d'une session X ou d'une session de connexion, et toutes les autres fenêtres ou programmes sont démarrés en tant que clients du programme ssh-agent. Grâce à l'utilisation de variables d'environnement, l'agent peut être localisé et automatiquement utilisé pour l'authentification lors de la connexion à d'autres machines à l'aide de ssh (1).

L'agent ne possède initialement aucune clé privée. Les clés sont ajoutées à l'aide de ssh-add (1). Lorsqu'il est exécuté sans arguments, ssh-add (1) ajoute les fichiers ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa et ~/.ssh/identity. Si l'identité a une phrase secrète, ssh-add (1) demande la phrase secrète sur le terminal s'il en a un ou à partir d'un petit programme X11 s'il s'exécute sous X11. Si aucun de ces éléments n'est le cas, l'authentification échouera. Il envoie ensuite l'identité à l'agent. Plusieurs identités peuvent être stockées dans l'agent; l'agent peut utiliser automatiquement n'importe laquelle de ces identités. ssh-add -l affiche les identités actuellement détenues par l'agent.

macOS Sierra

À partir de macOS Sierra 10.12.2 , Apple a ajouté une option de configuration UseKeychain pour les configurations SSH. Vous pouvez activer cette fonction en ajoutant UseKeychain yes à ton ~/.ssh/config.

Host *
  UseKeychain yes

Porte-clés OSX

Je n'utilise pas OSX mais j'ai trouvé cette Q&R sur SuperUser intitulée: Comment utiliser le trousseau Mac OS X avec les clés SSH? .

Je comprends que depuis Mac OS X Leopard, le trousseau prend en charge le stockage des clés SSH. Quelqu'un pourrait-il expliquer comment cette fonctionnalité est censée fonctionner?.

Donc, à partir du son, vous pouvez importer vos clés SSH dans le trousseau en utilisant cette commande:

$ ssh-add -K [path/to/private SSH key]

Vos clés devraient alors persister de démarrage en démarrage.

Chaque fois que vous redémarrez votre Mac, toutes les clés SSH de votre trousseau seront automatiquement chargées. Vous devriez pouvoir voir les clés dans l'application Keychain Access, ainsi que depuis la ligne de commande via:

  ssh-add -l

Source: Super utilisateur - Comment utiliser le trousseau Mac OS X avec les clés SSH?

183
slm

Le ssh-agent Est un service de session qui stocke temporairement les clés pour l'utilisateur.

Le principal objectif de l'agent SSH est de se souvenir de la version en texte clair d'une clé sécurisée à l'aide d'une phrase secrète. En d'autres termes, la clé est stockée sur le disque crypté à l'aide d'une phrase secrète et le propriétaire de la clé utilise ssh-add Ou un outil GUI pour fournir la phrase secrète et demander à l'agent de s'en souvenir jusqu'à la fin de la session ou jusqu'à l'utilisateur. demande la suppression explicitement.

Si vous n'utilisez pas de phrase secrète et que vous n'utilisez pas le transfert d'agent (ce qui n'est pas sûr pour la plupart des cas de toute façon), vous n'avez pas du tout besoin de l'agent. Tout client SSH doit pouvoir lire la clé à partir du disque, soit depuis un emplacement standard, soit depuis un emplacement spécifié explicitement.

Les emplacements standard sont répertoriés dans la page de manuel ssh(1):

La valeur par défaut est ~/.ssh/identity pour le protocole version 1, et ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 et ~/.ssh/id_rsa pour le protocole version 2.

Lorsque vous utilisez des emplacements non standard, vous pouvez utiliser le commutateur -i Sur ssh décrit dans la même page de manuel, ou l'option respective dans le client SSH que vous utilisez.

22
Pavel Šimerda

Dans Sierra :

Utilisez seKeychain . (Je n'ai pas essayé cela, mais cela semble être la solution la plus correcte.)

Ou

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Ou créez un fichier plist au lieu de l'ajouter à ~/.bash_profile.

Avertissement: comme d'autres l'ont remarqué, je ne sais pas à quel point il est sûr de stocker les mots de passe ssh dans le trousseau.

9
David Winiecki

Je fais cela pour m'aider à activer les identités ssh après le redémarrage du mac.

Version du système d'exploitation: MacOS catalina version 10.15.2

  1. Assurez-vous que votre clé ssh a une phrase secrète lorsque vous la créez car elle est requise pour le trousseau. Si vous n'en avez pas, vous pouvez toujours modifier votre no-passphrase-privatekey pour en avoir un en exécutant cette commande: ssh-keygen -p -f ~/.ssh/<.your-privatekey-filename.>

  2. Ajoutez votre clé privée ssh au trousseau en exécutant cette commande: ssh-add -K ~/.ssh/<.your-privatekey-filename.>

  3. Ajoutez tous vos ssh-privatekey dans le trousseau à votre ssh-agent en exécutant cette commande: ssh-add -A

  4. Vérifiez le vôtre par ssh-add -l, vous devriez voir des résultats si tout fonctionne bien.

Vous remarquerez qu'après avoir redémarré votre ordinateur, vous avez perdu votre identité ssh (ssh-add-l résultat aucune identité trouvée ...). Vous pouvez le corriger de deux manières:

  1. Ajouter ssh-add -A à votre profil de terminal, par exemple si vous utilisez zsh add ssh-add -A to ~/.zshrc ou l'un de vos fichiers de configuration de profil.
  2. Vous pouvez ajouter un script de démarrage macos, en créant un fichier dans ~/library/launchagents/com. <. Votrenom.>. <. Nom de la commande.>. Plist. Ex: c om.myusername.ssh.plist, détails du script:

    Étiquette com.user.loginscript ProgramArguments ssh-add -A RunAtLoad

  3. Dites à launchd de charger ce script à chaque redémarrage: launchctl load ~/Library/LaunchAgents/com.myusername.ssh.plist.

  4. Quoi qu'il en soit, si vous ne savez pas quel est votre nom d'utilisateur. Vous pouvez exécuter simplement la commande id pour voir votre nom d'utilisateur actuel.
1
Toni Firnandes