J'essaie d'automatiser les sauvegardes avec duplicity
, mais lorsque je teste le résultat, j'obtiens
gpg: échec du déchiffrement de la clé publique: mauvaise phrase secrète
Je veux vérifier si la phrase secrète que j'utilise est bien la phrase secrète associée à la clé secrète gpg correspondante, mais je ne vois de toute façon pas dans les options de ligne de commande gpg dire "Ne pas crypter ou décrypter quoi que ce soit. Confirmez simplement J'utilise la bonne phrase de passe. "
Cela suggère que je suis (encore une fois) incompréhensible Gnu Privacy Guard. (Il a une prédilection pour me narguer jusqu'à ce que je pleure.)
Est-il judicieux de demander à gpg de vérifier une phrase secrète? Si c'est le cas, comment?
Il n'y a pas de méthode intégrée pour le faire, mais c'est assez simple pour créer un test qui ne modifie rien et vous permet de simplement vérifier votre phrase secrète.
Vous n'avez pas précisé, donc je suppose que vous utilisez la version GnuPG moins que v2 et que vous êtes sous Linux avec Bash pour votre interpréteur de ligne de commande.
Je donnerai la commande ici et ci-dessous, j'expliquerai ce que chaque partie fait - (note: ce qui suit est pour la version 1 de la série GnuPG, voir ci-dessous pour la série GnuPG v2)
echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
Ce que cela fait, c'est d'abord, envoyez du texte à signer sur GnuPG avec echo "1234" |
- parce que nous ne voulons vraiment rien signer, ce n'est qu'un test, nous allons donc signer du texte inutile.
Ensuite, nous demandons à gpg de ne pas utiliser l'agent clé avec --no-use-agent
; ceci est important plus tard car, selon votre agent clé, il peut ne pas retourner "0" en cas de succès, et c'est tout ce que nous voulons faire - vérifier le succès de votre phrase secrète.
Ensuite, nous demandons à gpg de mettre les données signées directement dans le /dev/null
fichier, ce qui signifie que nous le supprimons et n'écrivons pas le résultat sur le terminal - REMARQUE: si vous n'utilisez pas une variante de Linux/Unix, ce fichier peut ne pas exister. Sur les fenêtres, vous devrez peut-être simplement lui permettre d'écrire les données signées à l'écran en omettant simplement le -o /dev/null
partie.
Ensuite, nous spécifions la clé avec laquelle nous voulons faire notre test en utilisant --local-user 012345
. Vous pouvez utiliser le KeyID pour une spécificité maximale, ou utiliser un nom d'utilisateur, selon la meilleure suite selon vos besoins.
Ensuite, nous spécifions -as
, qui active le mode de sortie ascii et définit le mode de contexte pour la signature. Le -
dit ensuite à GnuPG d'obtenir les données à signer à partir de l'entrée standard, qui est la toute première partie de la commande que nous avons donnée echo "1234" |
.
Et enfin, nous avons && echo "A message that indicates success"
- le "&&" signifie, si la commande précédente a réussi, affichez ce message. Ceci est juste ajouté pour plus de clarté, car le succès de la commande ci-dessus serait sinon indiqué par aucune sortie du tout.
J'espère que c'est assez clair pour que vous compreniez ce qui se passe et comment vous pouvez l'utiliser pour faire les tests que vous voulez faire. Si une partie n'est pas claire ou si vous ne comprenez pas, je serai heureux de clarifier. Bonne chance!
[EDIT] - Si vous utilisez GnuPG v2, la commande ci-dessus devra être légèrement modifiée, comme ceci:
echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
La raison en est que GnuPG v2 s'attend à ce que la phrase secrète soit récupérée via un agent, nous ne pouvons donc pas désactiver l'utilisation de l'agent avec --no-use-agent
et avoir l'effet désiré; au lieu de cela, nous devons dire à GnuPG v2 que nous voulons exécuter un processus "batch" et récupérer la phrase secrète de STDIN (standard dans) en utilisant l'option --passphrase-fd 1
.
Ligne de commande plus courte pour vérifier si la phrase de passe est correcte
gpg --export-secret-keys -a <KEYID> > /dev/null && echo OK