Question Comment utiliser le trousseau Mac OS X avec les clés SSH?


Je comprends que, puisque Mac OS X Leopard, le trousseau a pris 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 des clés RSA que j'ai générées stockées dans mon répertoire ~ / .ssh pour accéder à divers serveurs. Je n'ai pas de phrase de passe sur ces touches. Actuellement, pour me connecter à ces serveurs, j'utilise les commandes suivantes dans le terminal:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh user @ server

(J'ai écrit quelques fonctions Bash pour faciliter cela.)

Y a-t-il un meilleur moyen de le faire en utilisant le trousseau?


133
2017-12-28 12:08


origine




Réponses:


Pour que cela fonctionne, le $SSH_AUTH_SOCK la variable d'environnement devrait être pointée vers /tmp/launch-xxxxxx/Listeners. Ceci est censé être fait automatiquement lorsque vous vous connectez. L'écouteur sur ce socket parle le protocole ssh-agent.

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

En outre, le but principal du trousseau est de stocker les mots de passe sur vos clés ssh, mais vous dites que vous ne disposez pas de phrases secrètes sur ces clés. Je ne suis donc pas sûr de ce que vous attendez de l’intégration.

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


16
2017-12-28 17:37



Merci. Je vais donc devoir courir ssh-add ajouter mes identités RSA à l'agent ssh par défaut démarré lors de la connexion? - John Topley
Vous n'avez pas besoin d'exécuter ssh-add; ssh-agent demandera la phrase secrète de la clé la première fois que vous exécuterez ssh. - Rudedog
Il me demande le mot de passe chaque fois que je lance ssh. Le fait est que je ne veux pas avoir à entrer de mot de passe. - John Topley
Qu'est-ce qui vous demande le mot de passe? Je commence à soupçonner que c'est le serveur distant qui vous invite, ce qui met votre déclaration selon laquelle vos clés n'ont pas de phrase secrète dans une meilleure perspective. Si vous souhaitez ignorer le mot de passe sur le serveur distant, vous devez ajouter votre clé publique à $HOME/.ssh/authorized_keys sur ce serveur. Le trousseau ssh-agent + de Mac OS n'est utilisé que pour stocker la phrase secrète de vos clés ssh locales; il n'est pas destiné à envoyer des mots de passe distants sur les connexions ssh existantes. - Rudedog
utilisation ssh -v pour diagnostiquer ce que fait ssh. utiliser aussi sshd -p 8900 -v du côté du serveur et ssh -v remote:8900 diagnostiquer ce que fait sshd. - Rudedog


Depuis la sortie de Leopard d'OS X, ssh-agent est plus étroitement intégré à Keychain. Il est possible de stocker les phrases secrètes de toutes vos clés SSH en toute sécurité dans Keychain, à partir duquel ssh-agent les lira au démarrage. L'essentiel est qu'il est simple de sécuriser vos clés avec des phrases secrètes, mais de ne jamais avoir à saisir la phrase secrète pour les utiliser! Voici comment:

Ajoutez la phrase de passe à chaque clé ssh dans le 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)

Lorsque 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

242
2018-04-11 19:58



Cela devrait être la réponse acceptée. - Kris
la réponse acceptée répond à la question de cet utilisateur spécifique, mais cela répond à la question de l'utilisateur générique - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/...  Vous avez également besoin de l'option -K pour stocker les phrases secrètes dans le trousseau. - Neeme Praks
Si vous avez installé une autre version de SSH via un système de package comme Homebrew, il est nécessaire d'utiliser un chemin absolu comme /usr/bin/ssh-add. - Ludovic Kuty
Pour macOS Sierra, les choses ont changé. Voir github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


À 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 sur la partie Apple, ils voulaient s'aligner sur le courant dominant OpenSSH la mise en oeuvre. [1]


Comme expliqué ici, c'est la méthode recommandée depuis macOS 10.12.2:

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

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Toute clé que vous ajoutez à la ssh-agent en utilisant le ssh-add /path/to/your/private/key/id_rsa La commande sera automatiquement ajoutée au trousseau 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 le ssh-add -A commande (qui charge automatiquement toutes les clés ssh qui ont 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 sur le ssh-agent en utilisant le ssh-add -K /absolute/path/to/your/private/key/id_rsa commander. le -K L'argument garantit que la phrase clé est ajoutée à le trousseau de macOS. Assurez-vous d'utiliser le chemin absolu vers la clé. Utiliser un chemin relatif fera que 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. Fichiers Plist tels que celui-ci sont utilisés par launchd pour exécuter des scripts lorsque vous vous connectez [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. Dire launchd pour charger le fichier pliste vous venez de créer en exécutant: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Et vous devriez être tous ensemble.


70
2017-12-12 18:17



En relation: apple.stackexchange.com/questions/48502/... - slm


Il y a un moyen plus simple que La réponse de Ricardo pour conserver votre mot de passe entre les sessions / redémarrages de votre Mac exécutant 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 modifiez s'il existe) les éléments suivants ~/.ssh/config fichier:

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

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

Apple a volontairement modifié le comportement de ssh-agent dans macOS 10.12 Sierra pour ne plus charger automatiquement les clés SSH précédentes, comme indiqué dans ce manuel. OpenRadar, Discussion sur Twitter, et Note technique d'Apple. La solution ci-dessus imitera l’ancien comportement d’El Capitan et mémorisera votre mot de passe.


29
2018-01-05 18:53



Génial, fonctionne comme un charme, à peu près aussi propre que les autres et résolu au bon endroit :) - GerardJP


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

La [réponse de Jeff McCarrell] [2] est correcte, sauf que la commande pour ajouter la phrase de passe contient un tiret au lieu d'un trait d'union, c'est-à-dire –K au lieu de -K, provoquant un message à l'effet de –K: No such file or directory. Il devrait lire:

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

9
2018-04-28 13:28



Cela devrait être un commentaire à la réponse à laquelle vous faites référence plutôt qu’une nouvelle réponse. Nous parlons de sécurité ici. On pourrait suggérer que vous devriez le taper soigneusement plutôt que de copier-coller aveuglément ssh-add -K - Phil_1984_
En utilisant un trait d'union avec K, j'obtiens illegal option -- K. La lettre minuscule k est répertoriée comme une option. - Sam Dutton
Merci pour les commentaires. Je viens de vérifier sur macOS Sierra: -K, c'est-à-dire dash-capital-K, est toujours valide - simonair


Je pense que vous n'utilisez pas la valeur par défaut ssh commander. As-tu ssh installé via les ports? Essayer which ssh pour voir lequel ssh commande que vous utilisez.

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


6
2017-12-28 12:55



Je n'utilise pas de ports. - John Topley
Merci pour l'info :) J'ai eu des problèmes parce que j'utilisais OpenSSH de Homebrew. - ggustafsson


J'ai eu un problème similaire en essayant de me connecter en utilisant un certificat ssh client. Dans ce cas précis, 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 une phrase secrète.
  • 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 à distance -> Serveur git / ssh
  • Mac OS X 10.8.5

Lorsque je me suis connecté à Mac distant en utilisant un poste de travail distant, 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 déverrouille et permet à ssh-agent d'y accéder.
  2. eval `ssh-agent -s` Démarre ssh-agent pour l'utilisation du shell. Il récupérera la phrase secrète du trousseau et l'utilisera pour déverrouiller la clé ssh privée.
  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 le trousseau à nouveau.

6
2017-10-14 12:29



Pour que le n ° 2 fonctionne pour moi dans un alias, je devais utiliser eval \$(ssh-agent) par Re: connexion à distance et trousseau. Quand pas dans un alias eval $(ssh-agent) travaux (sans la barre oblique inverse $). - Travis


Voir également:

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

... ajoutant cette note comme plus de détails a été demandé: la commande "security" est capable d'importer des clés (et d'autres choses) directement dans les trousseaux. Ce qui est bien, c'est que contrairement à ssh-add, vous pouvez spécifier le trousseau. Cela permet d'importer directement dans le système Keychain ("man security" pour apprendre comment)


4
2018-03-26 09:45



Pourriez-vous donner un peu plus de détails à cette réponse, s'il vous plaît? Merci. - Matthew Williams


La meilleure solution d'Apple (depuis macOS 10.12.2) est décrit ici

Alors faites simplement ce qui suit:

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


1
2018-01-26 10:39



En utilisant >> est en danger si vous entrez la commande plusieurs fois. Mieux vaut faire une édition manuelle du fichier, comme décrit par ChrisJF répond. - Cœur
Oui vous y êtes - Ben