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

150

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, la clé n'a plus été ajoutée à l'agent:

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

Pourquoi est-ce arrivé?

レ ッ ク ス
la source
Je n'ai pas le temps de répondre complètement pour le moment, mais gpg-agent en mode ssh fera ce que vous voulez. Essayez cela à la place de l'ancien agent ssh. Si cela aide, je peux essayer d’élargir cela plus tard.
Vality
@Vality: Je doute que le gpg-agent soit persistant après les redémarrages.
Pavel Šimerda
@ PavelŠimerda Il crypte les clés privées avec le mot de passe des utilisateurs, puis les place dans $HOME/.gnupg/private-keys-v1.ddès que vous les ajoutez avec ssh-add. C'est vraiment persistant. En supposant que vous ayez un répertoire personnel non volatile.
Vality
@Vality: cela ne devrait-il pas être considéré comme un problème de sécurité? Ne pourriez-vous pas aussi bien utiliser une clé sans phrase secrète et vous en servir sans avoir besoin d'un agent?
Pavel Šimerda
1
@ PavelŠimerda Ce n'est pas vraiment un problème de sécurité car la clé est stockée cryptée avec le mot de passe de l'utilisateur, elle a toujours besoin du mot de passe saisi à chaque fois que l'utilisateur se connecte pour le déchiffrer. Stocker la clé non cryptée signifie qu'un utilisateur root (ou un voleur qui a pris votre disque dur) peut les voler à votre répertoire personnel. Avec gnupg, s'ils les volent, ils seront cryptés avec votre mot de passe et donc inutiles.
Vality

Réponses:

174

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 rajoutiez à nouveau. De la ssh-agentpage de manuel:

ssh-agent est un programme qui contient les 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 que toutes les autres fenêtres ou programmes sont lancés en tant que clients du programme ssh-agent. Grâce à l'utilisation de variables d'environnement, l'agent peut être localisé et utilisé automatiquement pour l'authentification lors de la connexion à d'autres machines à l'aide de ssh (1).

L'agent n'a 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_ecdsaet ~/.ssh/identity. Si l'identité a un mot de passe composé, ssh-add (1) demande le mot de passe du terminal s'il en a un ou d'un petit programme X11 s'il est exécuté sous X11. Si ce n'est pas 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 l'une de ces identités. ssh-add -laffiche 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 fonctionnalité en ajoutant UseKeychain yesà votre ~/.ssh/config.

Host *
  UseKeychain yes

Porte-clés OSX

Je n’utilise pas OSX, mais j’ai trouvé ce Q & A sur SuperUser intitulé: Comment utiliser le trousseau Mac OS X avec des 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 s'il vous plaît expliquer comment cette fonctionnalité est censée fonctionner.

Donc, à partir de là, 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 à 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 des clés SSH?

slm
la source
vraiment? Sur Linux, je n'ai pas ce problème. Dois-je "ssh-add my_key" chaque fois que je redémarre mon ordinateur?
Premier
2
@Alex Comme l'explique la réponse, l'agent ajoute automatiquement ~/.ssh/id_rsa. J'imagine que c'est l'emplacement de votre fichier de clés sur Linux. Il est également possible que vous n'utilisiez pas l'agent de clé ssh standard. Il en existe d'autres, tels que gnome-keyring-daemon, qui peuvent avoir un comportement différent.
Patrick
mais sur Mac, il s'appelle "id_rsa_mac". Comment faire en sorte que l'agent l'ajoute automatiquement?
Premier
@ Patrick: Je ne suis pas sûr que le classique ssh-agentajoute des clés automatiquement. À mon avis, il ssh-addlit les emplacements standard ou le sshclient si vous n'utilisez pas l'agent.
Pavel Šimerda
5
Petit commentaire, si votre commande ssh-add ne reconnaît pas l'indicateur -K, vous utilisez probablement la version macports de ssh-add ... vous pouvez contourner la version macports en spécifiant le chemin d'accès complet à la version OSX de ssh-add comme ceci:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

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

L’agent SSH a pour objectif principal de retenir 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-addun outil graphique pour fournir la phrase secrète et demander à l'agent de s'en souvenir jusqu'à la fermeture de la session ou la demande explicite de suppression par l'utilisateur.

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

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

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

Lorsque vous utilisez des emplacements non standard, vous pouvez utiliser le -icommutateur pour le sshdécrire dans la même page de manuel ou l'option correspondante dans le client SSH que vous utilisez.

Pavel imeri
la source
4
+1 pour préconiser la non-utilisation dessh-agent
dg99
7

En Sierra :

Utilisez UseKeychain . (Je n'ai pas essayé cela, mais cela ressemble à 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 d’être ajouté à ~/.bash_profile.

Clause de non-responsabilité: comme d’autres l’ont fait remarquer, je ne sais pas dans quelle mesure il est sûr de stocker les mots de passe ssh dans le trousseau.

David Winiecki
la source
J'ai essayé toutes les méthodes ci-dessus mais seulement celle-ci fonctionne. Je vous remercie!
Duannx