125 votes

Comment utiliser la ligne de commande de gpg pour vérifier que la phrase de passe est correcte ?

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 de passe

Je veux vérifier si la phrase de passe que j'utilise est bien la phrase de passe associée à la clé secrète correspondante de gpg, mais je ne vois pas dans les options de la ligne de commande de gpg la possibilité de dire "Ne rien crypter ou décrypter". Confirmez simplement que j'utilise la bonne phrase d'authentification".

Cela suggère que je suis peut-être (encore une fois) en train de mal comprendre 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 de passe ? Si oui, comment ?

38voto

Lei Zhao Points 86

Pour moi, la façon la plus simple de vérifier la phrase d'authentification est d'utiliser gpg --passwd en abrégé. Il tente de modifier la phrase de passe et l'étape consiste à confirmer l'ancienne phrase de passe, puis à cliquer sur "annuler" à l'invite de la nouvelle phrase de passe, ce qui permet de conserver la phrase de passe intacte.

gpg --passwd <your-user-id>

Comme mentionné par ford04 Pour les versions plus récentes de GPG, la commande ci-dessus peut être améliorée pour devenir

gpg --dry-run --passwd <your-user-id>

ce qui est encore mieux. Voir le s'engager .

24voto

Guest Points 267

Il s'agit d'une ligne de commande plus courte pour vérifier si la phrase d'authentification est correcte :

gpg --export-secret-keys -a <KEYID> > /dev/null && echo OK

5voto

MaXi32 Points 35

Attention, n'utilisez pas echo gpg -o /dev/null comme le suggère la réponse du haut de cette page. Cela aura pour conséquence que /dev/null aura une permission invalide et corrompra le fichier /dev/null fichier. Vous pouvez vérifier l'autorisation du fichier /dev/null lors de l'exécution de cette commande pour le prouver.

Vous pouvez utiliser ceci :

echo "1234" | gpg -q --batch --status-fd 1 --sign --local-user $KEY_ID --passphrase-fd 0 > /dev/null

J'ai également créé un bash script pour cela (Celui-ci fonctionne avec Centos 8). Ce script demandera la phrase d'authentification, si elle est invalide, il continuera à demander d'entrer une phrase d'authentification valide. De plus, si vous entrez un KEY_ID erroné ou inexistant en tant qu'argument, il peut également le valider :

#!/bin/bash
# usage ./gpgcron KEYID   | ./gpgcron 2B705B8B6FA943B1
script_path=$(dirname $(realpath -s $0))
script_name=$(basename -- "$0")
GPG_CACHE_BIN="/usr/libexec/gpg-preset-passphrase"
KEY_ID=$1
KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*')
RETVAL=$?
if [[ $RETVAL -ne 0 || -z $KEY_ID ]]; then
    echo "Please provide correct KEY_ID. Example ./$script_name KEY_ID"
    exit 1
fi

export GPG_TTY=$(tty)

function set_gpg_cachepass {
    read -s -p "[$script_name | input]: Enter passphrase to cache into gpg-agent: " PASSPHRASE; echo
    $GPG_CACHE_BIN -c $KEY_GRIP <<< $PASSPHRASE
    RETVAL=$?
    echo "[$script_name | info ]: gpg-preset-passphrase return code: [$RETVAL]"
    if [ $RETVAL = 0 ]; then
        echo "[$script_name | info ]: A passphrase has been set and cached in gpg-agent"
        echo "[$script_name | info ]: Paraphrase set return code: [$RETVAL]"
        gpg_validatepass
    else
        echo "[$script_name | info ]: Unsuccessful error occured: [$RETVAL]"
        set_gpg_cachepass
    fi
}

function gpg_validatepass {
    echo "[$script_name | info ]: Validating passphrase cached in gpg-agent ..."
    echo "1234" | gpg -q --batch --status-fd 1 --sign --local-user $KEY_ID --passphrase-fd 0 > /dev/null
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo "[$script_name | info ]: OK, valid passphrase has been cached in gpg-agent"
    else
        echo "[$script_name | info ]: Warning, invalid passphrase or no passphrase is cached in gpg-agent"
        set_gpg_cachepass
    fi
}

RES=$(echo "KEYINFO --no-ask $KEY_GRIP Err Pmt Des" | gpg-connect-agent | awk '{ print $7 }')
if [ "$RES" == "1" ]; then
    echo "[$script_name | info ]: OK, passphrase is already cached in gpg agent for KEY_ID of [$KEY_ID]"
    gpg_validatepass
else
    echo "[$script_name | info ]: Warning, no passphrase is cached in gpg agent for KEY_ID of [$KEY_ID]"
    set_gpg_cachepass
fi

Exemple de sortie si aucun mot de passe n'est mis en cache dans gpg-agent :

[root@earth gpg]# ./gpgcron 2B705B8B6FA943B2
[gpgcron | info ]: Warning, no passphrase is cached in gpg agent for KEY_ID of [2B705B8B6FA943B2]
[gpgcron | input]: Enter passphrase to cache into gpg-agent:

Exemple de sortie en cas de saisie d'une phrase d'authentification invalide (la demande sera répétée) :

[root@earth gpg]# ./gpgcron 2B705B8B6FA943B2
[gpgcron | info ]: OK, passphrase is already cached in gpg agent for KEY_ID of [2B705B8B6FA943B2]
[gpgcron | info ]: Validating passphrase cached in gpg-agent ...
gpg: signing failed: Bad passphrase
gpg: signing failed: Bad passphrase
[gpgcron | info ]: Warning, invalid passphrase or no passphrase is cached in gpg-agent
[gpgcron | input]: Enter passphrase to cache into gpg-agent:

Exemple de sortie si une phrase d'authentification valide est saisie :

[gpgcron | input]: Enter passphrase to cache into gpg-agent:
[gpgcron | info ]: gpg-preset-passphrase return code: [0]
[gpgcron | info ]: A passphrase has been set and cached in gpg-agent
[gpgcron | info ]: Paraphrase set return code: [0]
[gpgcron | info ]: Validating passphrase cached in gpg-agent ...
[gpgcron | info ]: OK, valid passphrase has been cached in gpg-agent

Lorsque la phrase d'authentification valide est mise en cache, la prochaine fois que vous exécuterez ce script, il ne vous demandera pas d'entrer la phrase d'authentification. Ce script apporte donc la solution à votre question : "Confirmez simplement que j'utilise la bonne phrase d'authentification".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X