web-dev-qa-db-fra.com

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.

J'ai généré des clés RSA stockées dans mon répertoire ~/.ssh pour accéder à différents serveurs. Je n'ai pas de phrases secrètes définies sur ces clés. Actuellement, pour me connecter à ces serveurs, j'utilise les commandes suivantes dans le terminal:

 eval `ssh-agent` 
 ssh-add ~/.ssh/some_key_rsa 
 ssh utilisateur @ serveur 

(J'ai écrit quelques fonctions Bash pour rendre cela plus facile.)

Y at-il une meilleure façon de faire cela en utilisant le trousseau?

137
John Topley

Pour que cela fonctionne, la variable d’environnement $SSH_AUTH_SOCK doit être pointée sur /tmp/launch-xxxxxx/Listeners. Cela est supposé se faire automatiquement lorsque vous vous connectez. L'écouteur de ce socket parle du protocole ssh-agent.

Vos scripts bash démarrent votre propre agent ssh (orthographié ssh-agent, pas ssh_agent) et remplacent le ssh-agent existant configuré pour vous lors de la connexion.

En outre, l’intérêt principal du trousseau est de stocker les mots de passe sur vos clés ssh, mais vous dites que vous n’avez pas de phrase secrète définie sur ces clés, je ne suis donc pas sûr de ce que vous attendez de l’intégration du trousseau.

Enfin, lors de votre première connexion, vous ne verrez probablement pas de processus ssh-agent. Ce processus sera démarré automatiquement par les services de lancement la première fois que quelque chose essaie de lire ce socket dans /tmp.

16
Rudedog

Depuis la version OS X de Leopard, ssh-agent est plus étroitement intégré à Keychain. Il est possible de stocker les phrases secrètes de toutes vos clés SSH de manière sécurisée dans Keychain, à partir duquel ssh-agent les lira au démarrage. L'essentiel, c'est qu'il est simple de sécuriser vos clés avec des phrases secrètes, mais vous n'avez jamais à taper la phrase secrète pour les utiliser! Voici comment:

Ajoutez la phrase secrète à chaque clé ssh du trousseau: (l'option -k charge uniquement les clés privées, ignore les certificats)

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

(notez que c'est un K majuscule)

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
252
jeffmcc

À partir de macOS Sierra , ssh-agent ne charge plus automatiquement les clés ssh précédemment chargées lorsque vous vous connectez à votre compte. C’est intentionnel de la part d’Apple, ils voulaient se ré-aligner sur la mise en œuvre traditionnelle OpenSSH . [1]


Comme expliqué ici , il s'agit de la méthode recommandée depuis macOS 10.12.2 :

  1. Ajoutez les lignes suivantes à votre fichier ~/.ssh/config:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Toute clé que vous ajoutez à ssh-agent à l'aide de la commande ssh-add /path/to/your/private/key/id_rsa sera automatiquement ajoutée au trousseau de clés et devrait être chargée automatiquement au redémarrage.


Ce qui suit est obsolète (conservé pour référence).

Pour revenir au comportement précédent, vous souhaitez exécuter la commande ssh-add -A (qui charge automatiquement toutes les clés ssh comportant des phrases de passe sur votre trousseau) lorsque vous vous connectez. Pour ce faire, procédez comme suit:

  1. Tout d’abord, ajoutez toutes les clés que vous souhaitez charger automatiquement dans ssh-agent à l’aide de la commande ssh-add -K /absolute/path/to/your/private/key/id_rsa. L'argument -K garantit que la phrase clé est ajoutée à Le trousseau de macOS . Assurez-vous d'utiliser le chemin absolu vers la clé. Si vous utilisez un chemin relatif, le script lancé automatiquement ne trouvera pas votre clé.

  2. Assurez-vous que toutes vos clés sont affichées comme ajoutées lorsque vous tapez ssh-add -A.

  3. Créez un fichier appelé com.yourusername.ssh-add.plist dans ~/Library/LaunchAgents/ avec le contenu ci-dessous. Les fichiers Plist tels que celui-ci sont utilisés par launchd pour exécuter les scripts lors de la connexion. [2][3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Dites à launchd de charger le fichier plist que vous venez de créer en exécutant: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Et vous devriez être tous ensemble.

76

Il existe un moyen plus simple que La réponse de Ricardo consiste à conserver votre mot de passe entre les sessions/redémarrages de votre Mac sous 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    Remarque: modifiez le chemin d'accès à l'emplacement de votre clé id_rsa.
  2. ssh-add -A
  3. Créez (ou éditez s'il existe) le fichier ~/.ssh/config suivant:

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

    Maintenant, le mot de passe est mémorisé entre les redémarrages!

Apple a délibérément modifié le comportement de ssh-agent dans macOS 10.12 Sierra afin de ne plus charger automatiquement les clés SSH précédentes, comme indiqué dans cette OpenRadar , Discussion Twitter , et Note technique de Apple . La solution ci-dessus imitera l'ancien comportement d'El Capitan et retiendra votre mot de passe.

32
ChrisJF

Remarque: pour macOS Sierra, veuillez vous reporter à la réponse plus récente de ChrisJF .

La [réponse de Jeff McCarrell] [2] est correcte, sauf que la commande pour ajouter la phrase secrète contient un tiret en à la place d'un trait d'union, c'est-à-dire –K au lieu de -K, ce qui génère un message ayant pour effet –K: No such file or directory. Il devrait lire:

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

Je soupçonne que vous n'utilisez pas la commande ssh par défaut. Avez-vous ssh installé via les ports? Essayez which ssh pour voir quelle commande ssh vous utilisez.

Habituellement, il devrait afficher une boîte de dialogue vous demandant votre mot de passe, s'il n'est pas déjà enregistré dans votre trousseau.

6
Olly

J'ai eu un problème similaire lors de la connexion à l'aide d'un cert ssh client. Dans ce cas spécifique, c'était pour accéder à un dépôt git. C'était la situation:

  • La clé a été enregistrée dans ~/.ssh/
  • La clé privée a un mot de passe.
  • La phrase secrète est stockée dans le trousseau de connexion OS X. ~/Library/Keychains/login.keychain
  • La connexion était la suivante: mon mac -> mac distant __ -> serveur git/ssh
  • Mac OS X 10.8.5

Lorsque je me suis connecté à un Mac distant en utilisant le Bureau à distance, je n’ai eu aucun problème. Cependant, lors de la connexion avec SSH au Mac distant, on m'a demandé à chaque fois le mot de passe ssh. Les étapes suivantes l'ont résolu pour moi.

  1. security unlock-keychain La phrase secrète est stockée dans le trousseau de connexion. Cela le déverrouille et permet à ssh-agent d'y accéder.
  2. eval `ssh-agent -s` Démarre ssh-agent pour l'utilisation de Shell. Il obtiendra la phrase secrète du trousseau et l'utilisera pour déverrouiller la clé privée ssh.
  3. Établissez la connexion ssh/git et faites mon travail.
  4. eval `ssh-agent -k` Tuez le ssh-agent en cours d'exécution.
  5. security lock-keychain Verrouillez à nouveau le trousseau.
6
orkoden

Voir également:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... en ajoutant cette note sous forme de détails supplémentaires: la commande "sécurité" permet d'importer des clés (et d'autres éléments) directement dans des trousseaux. La bonne chose est que contrairement à ssh-add, vous pouvez spécifier le trousseau. Cela permet d'importer directement dans le système Keychain ("sécurité homme" pour savoir comment faire)

4
xaphod

La meilleure solution envisagée par Apple (depuis macOS 10.12.2) est décrite ici

Il suffit donc de faire ce qui suit:

echo "UseKeychain yes" >> ~/.ssh/config

1
Ben