6 votes

Comment puis-je utiliser mon agent GPG pour SSH partout?

Sur mon système, j'essaie de configurer l'authentification SSH via mon agent GPG (installé via brew). Jusqu'à présent, cela fonctionne dans mon terminal grâce à l'ajout des lignes suivantes dans ~/.profile:

# Activer le support SSH via GPG
export "GPG_TTY=$(tty)"
export "SSH_AUTH_SOCK=${HOME}/.gnupg/S.gpg-agent.ssh"

Cependant, les applications GUI (par ex. PyCharm) utilisent toujours l'agent SSH intégré à Mac (de manière agaçante). Y a-t-il un moyen/un endroit où je peux définir mon SSH_AUTH_SOCK pour toute ma session? Idéalement, je ne veux pas désactiver SIP pour atteindre mon objectif, et des solutions comme ceci ne semblent pas fonctionner.

Par exemple, en exécutant import os; os.environ['SSH_AUTH_SOCK'] dans la console Python intégrée de PyCharm, affichera toujours /private/tmp/com.apple.launchd.whatever/Listeners au lieu de mon socket d'authentification. De même, il ne demandera pas le mot de passe de ma clé GPG mais passera plutôt par le flux d'authentification standard.

Cela persiste également dans XCode, en utilisant un petit programme d'exemple pour obtenir la valeur de SSH_AUTH_SOCK, donc ce n'est pas un problème de PyCharm ou uniquement de Python.

Je tourne actuellement sous Mojave 10.14.4 sur mon système.

6voto

fortran Points 26495

J'ai donc réussi à trouver une solution peu orthodoxe qui permet d'atteindre le même objectif. Il semble impossible de remplacer SSH_AUTH_SOCK, et je ne peux pas désactiver l'agent intégré car je souhaite préserver SIP.

Cependant, je peux contourner le problème en utilisant des liens symboliques pour que mon agent fonctionne de manière fiable. Grâce à un article intéressant expliquant comment exploiter la YubiKey sur un Mac (similaire à mon objectif), j'ai réussi à créer un LaunchAgent pour créer un lien symbolique vers où pointe SSH_AUTH_SOCK. Jusqu'à présent, je n'ai pas encore effectué de tests approfondis avec cela, mais cela semble fonctionner correctement.

Au cas où le lien source serait supprimé, j'ai créé un fichier à l'emplacement ~/Library/LaunchAgents/link-ssh-auth-sock.plist avec le contenu suivant:

  Label
  link-ssh-auth-sock
  ProgramArguments

    /bin/sh
    -c
    /bin/ln -sf $HOME/.gnupg/S.gpg-agent.ssh $SSH_AUTH_SOCK

  RunAtLoad

Ce LaunchAgent remplace le socket généré par Apple (situé dans /private/tmp/...) par le mien, mais conserve la variable d'environnement d'Apple. Le lien symbolique fonctionne et est reconnu par toute application prenant en charge l'utilisation native de SSH (dans mon cas, PyCharm).

Ce n'est pas une solution véritable au problème (le socket est lié symboliquement, qui sait quels problèmes cela pourrait causer), mais cela fonctionne du moins pour le moment.

Je vais continuer à chercher une solution véritable à ce problème, mais en attendant je partage cette réponse pour d'autres âmes curieuses confrontées au même problème.

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