Gentoo Linux GPG crypte correctement un fichier passé par le paramètre mais lance «ioctl inapproprié pour le périphérique» lors de la lecture à partir de l'entrée standard

23

J'utilise Gentoo Hardened avec le noyau 4.1.7-hardened-r1 et j'essaie de crypter un fichier en utilisant GPG à partir d'une session shell ouverte à partir de SSH et avec la DISPLAYvariable désactivée afin d'utiliser des pinentry-curses pour l'invite de mot de passe. Utiliser gpg -o file.gpg --symmetric fileI peut très bien chiffrer. J'obtiens pv file | gpg -o file.gpg --symmetricle message d'erreur suivant:

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device
RAKK
la source

Réponses:

41

Vous devez définir votre variable GPG_TTY pour qu'elle fonctionne, comme dans ce document :

GPG_TTY=$(tty)
export GPG_TTY

Ces deux lignes sont censées être dans votre .bashrc(en supposant que bash), elles sont donc exécutées chaque fois que vous ouvrez une nouvelle session de terminal.

Il existe cependant une autre solution: dans bash, vous pouvez exécuter votre pvet prétendre qu'il s'agit d'un fichier, en utilisant la substitution de processus:

gpg -o file.gpg --symmetric <(pv file)

En tant que tel, ce n'est peut-être pas une bonne idée de transférer des éléments vers des programmes qui attendent des entrées supplémentaires. Cela peut fonctionner différemment que prévu.

TNW
la source
Existe-t-il un moyen de modifier ou de corriger ce comportement? Pour l'instant, je viens d'essayer exactement la même commande de lecture depuis stdin sur Debian et GPG a demandé mon mot de passe.
RAKK
@RAKK Pourriez-vous décrypter le fichier résultant, cependant?
TNW
Oui, sans accroc sur Debian. Créez un petit fichier avec des données aléatoires appelées dsfargeg, chiffrez-le avec pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, entrez un mot de passe lorsque vous y êtes invité, déchiffrez la sortie avec gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, entrez votre mot de passe et comparez l'original et le fichier déchiffré avec sha256sum dsfargeg dsfargeg.gpg.dec. Les deux hachages seront identiques.
RAKK
@RAKK Vous avez raison. Il semble que gpg s'ouvre /dev/ttysur Debian. C'était la version 1.4, cependant, dans mon cas; gpg a fait un peu de refonte depuis. Cette approche a peut-être été abandonnée pour une raison quelconque - vous voudrez peut-être en savoir plus par vous-même (ou cela peut être un correctif spécifique à Debian). En tant que tel, il serait probablement préférable pour vous de ne pas y compter. Je vais fouiller dans les traces, pour vérifier ce qui se passe exactement dans les nouveaux gpg (j'ai 2.1).
TNW
Curieusement, j'ai trouvé une solution! La définition de la variable GPG_TTY le fait pour moi. Je mettrai à jour la réponse en conséquence.
TNW