Je stocke divers mots de passe (par exemple, pour les serveurs de messagerie distants) dans mon trousseau. À partir de la ligne de commande, une fois connecté localement, je peux récupérer ces informations via:
security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>
Cependant, les résultats ne peuvent pas être obtenus lorsqu'ils sont exécutés à distance (en ssh 'dans la boîte depuis un autre endroit):
security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>
De plus, la valeur de retour de la commande finale (avec -g) est 36.
J'ai vidé la sortie d' set
un login local et l' ai comparée à une connexion distante. Les variables d'environnement manquantes sont:
Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME
Qu'est-ce que je rate? J'ai SSH_AUTH_SOCK
mis à une valeur valide (retournée de ssh-agent
).
Réponses:
En reproduisant ceci pour enquêter, je remarque que mon trousseau est configuré pour «Confirmer avant d'autoriser l'accès». Ainsi, lorsque j'exécute
find-internet-password
localement avec l'-g
indicateur, une boîte de dialogue indiquant que la sécurité souhaite utiliser vos informations confidentielles stockées dans «smtp. gmail.com "dans votre trousseau. Si je clique sur «Autoriser», alors cela fonctionne. Si je clique sur «Refuser», lassh
procédure échoue de la même manière , avec un code de retour de51
.Lorsque j'essaie la commande à distance via
ssh
, le-g
résultat immédiat est un échec, avec le statut de36
celui que vous signalez.Je suppose que cela est dû au fait que, lorsque vous entrez
ssh
, le système n'a aucun moyen de faire apparaître une boîte de dialogue vous permettant de confirmer que vous souhaitez autoriser lasecurity
commande à accéder à ces informations.J'ai été en mesure de faire en sorte que la commande fonctionne en étant connecté en
ssh
cliquant d'abord sur l'option «Toujours autoriser» lors de l'exécution de la commande localement. Ceci met à jour les autorisations dans le trousseau afin que je n’aie plus besoin de répondre à la boîte de dialogue (même localement), ce qui lui permet également de fonctionner à distance.Cependant, je ne sais pas si cela vous sera entièrement utile, car cela signifie que vous devrez accorder au
security
programme un accès préventif à tout élément de trousseau auquel vous voudrez peut-être accéder à distance. Il peut être possible d'écrire un script pour faire cela?Si vous expérimentez manuellement cette opération et souhaitez ultérieurement révoquer cet accès, vous pouvez accéder à l'élément concerné dans Accès au trousseau, choisir Obtenir des informations et consulter l' onglet Contrôle d'accès . Vous verrez une entrée pour
security
cela, que vous pouvez supprimer:la source
security unlock-keychain ~/Library/Keychains/login.keychain
dans la session à distance où vous essayez d'utiliser le trousseau. Cela vous demandera votre mot de passe, vous ne pourrez donc pas le faire dans un script. Il y a peut-être moyen d'y parvenir sans mot de passe, mais c'est hors du champ de cette question :)/Users/[user]/Library/Keychains/
chemin par défaut , vous pouvez omettre le chemin complet et utiliser simplementlogin.keychain
.security -i unlock-keychain
fonctionne pour moi dans MacOS 10.13.4 High Sierra.
Après avoir étudié la solution de Karthick, j'ai trouvé ceci. Le -i rend la commande interactive et vous invite à entrer votre mot de passe dans le terminal.
la source
Tant que le trousseau de sécurité est à l'emplacement par défaut, vous pouvez exécuter la commande ci-dessous pour le déverrouiller. Il ne demande pas un mot de passe. Cela a fonctionné à distance.
security unlock-keychain -p "enter password"
la source