105 votes

Conserver les informations d'identification de GnuPG en cache pour toute la session utilisateur

GnuPG peut, avec gpg-agent, mettre en cache l'accès à une clé privée. Comment puis-je garder ce cache actif pour toute la session utilisateur ?

Lorsque je déverrouille la clé pour gpg-agent, elle reste en cache pour une durée limitée seulement. Avec l'agent SSH, je saisis le mot de passe une seule fois et il reste en cache pour toute la session. Je souhaite le même comportement pour gpg-agent.

Ainsi, ssh-agent ne souffre pas d'une durée de mise en cache limitée. Mais gpg-agent limite la durée de mise en cache, du moins par défaut. Comment puis-je éliminer la limite de temps de mise en cache de gpg-agent ?

141voto

Jens Erat Points 16432

Jusqu'à GnuPG 2

La configuration utilisateur (dans ~/.gnupg/gpg-agent.conf) ne peut définir que la durée de mise en cache par défaut et maximale ; elle ne peut pas être désactivée.

L'option default-cache-ttl définit le délai (en secondes) après la dernière activité GnuPG (il se réinitialise si vous l'utilisez), l'option maximum-cache-ttl définit la durée (en secondes) pendant laquelle il conserve la mise en cache après avoir saisi votre mot de passe. La valeur par défaut est de 600 secondes (10 minutes) pour default-cache-ttl et de 7200 secondes (2 heures) pour maximum-cache-ttl.

Réglez-la à un an environ – mettons, 34560000 secondes (400 jours) – et tout devrait bien se passer :

default-cache-ttl 34560000
maximum-cache-ttl 34560000

Mais pour que ce changement prenne effet, vous devez mettre fin à la session en redémarrant gpg-agent.

Si vous souhaitez limiter la durée de mise en cache à la durée de votre session, vous devriez arrêter le daemon à la déconnexion. Cela varie beaucoup selon les systèmes d'exploitation, donc je vous renvoie vers une autre question/réponse contenant des astuces pour différents systèmes.

Vous pourriez également redémarrer le gpg-agent lors de la connexion, mais cela ne limite pas le temps de mise en cache à la durée de la session, mais aux connexions d'un utilisateur. À vous de décider si c'est un problème dans votre cas.

GnuPG 2.1 et versions ultérieures

Dans GnuPG 2.1 et versions ultérieures, l'option maximum-cache-ttl a été renommée max-cache-ttl sans autres modifications.

27voto

bleach Points 51

Pour Windows

Le fichier que vous devez modifier doit être placé ici : ~\.gnupg\

Si vous exécutez cela dans une fenêtre PowerShell, cela ouvrira : C:\Users\\.gnupg

Placez simplement le fichier gpg-agent.conf avec les valeurs que vous souhaitez.

Vous pouvez vérifier si cela a fonctionné en exécutant :

  1. gpgconf.exe --reload gpg-agent
  2. gpgconf.exe --list-options gpg-agent

Vous pouvez également utiliser cette commande d'une seule ligne : Set-Content -Path ~\.gnupg\gpg-agent.conf -Value "default-cache-ttl 86400$([System.Environment]::NewLine)max-cache-ttl 86400"

Anciennes Versions De GPG

Dans les anciennes versions, le fichier se trouvait ici : $env:AppData\gnupg (C:\Users\\AppData\Roaming\gnupg)

Donc si vous ne le trouvez pas à ~\.gnupg\gpg-agent.conf, regardez là.

16voto

SuperSandro2000 Points 259

Assurez-vous de recharger votre agent gpg avec gpg-connect-agent reloadagent /bye après avoir modifié la configuration.

3voto

MaXi32 Points 168

Étant donné que votre problème est que vous avez besoin de plus de temps de cache illimité pour la phrase secrète, vous pouvez utiliser gpg-preset-passphrase pour mettre en cache votre mot de passe gpg, et vous aurez un temps de cache illimité jusqu'à ce que l'agent soit redémarré / rechargé. Lisez la documentation ici:

gpg-preset-passphrase:

Les phrases secrètes définies avec cet utilitaire n'expirent pas sauf si l'option --forget est utilisée pour les effacer explicitement du cache - ou si gpg-agent est redémarré ou rechargé (en lui envoyant un SIGHUP). Notez que le temps de cache maximal défini avec --max-cache-ttl est toujours respecté. Il est nécessaire d'autoriser cette prédéfinition de phrase secrète en démarrant gpg-agent avec l'option --allow-preset-passphrase.

Documentation

Exemple de la façon de mettre en cache un mot de passe en utilisant l'utilitaire gpg-preset-passphrase en bash:

#!/bin/bash
GPG_PRESET_PASS="/usr/libexec/gpg-preset-passphrase"
KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*')
read -s -p "[$script_name]: Entrez la phrase secrète à mettre en cache dans gpg-agent: " PASSPHRASE; echo
$GPG_PRESET_PASS -c $KEY_GRIP <<< $PASSPHRASE
RETVAL=$?
if [ $RETVAL = 0 ]; then
    echo "OK"
else
    echo "NOT OK"
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X