O Gentoo Linux GPG criptografa corretamente um arquivo transmitido pelo parâmetro, mas lança “ioctl inadequado para o dispositivo” ao ler da entrada padrão

23

Estou executando o Gentoo Hardened com o kernel 4.1.7-hardened-r1 e estou tentando criptografar um arquivo usando GPG a partir de uma sessão de shell aberta no SSH e com a DISPLAYvariável desabilitada para usar pinentry-maldições no prompt de senha. Usando gpg -o file.gpg --symmetric fileeu posso criptografar muito bem. Usando pv file | gpg -o file.gpg --symmetric, recebo a seguinte mensagem de erro:

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

Respostas:

41

Você deve definir sua variável GPG_TTY para que ela funcione, como neste documento :

GPG_TTY=$(tty)
export GPG_TTY

Essas duas linhas deveriam estar no seu .bashrc(assumindo o bash), então elas são executadas toda vez que você abre uma nova sessão do terminal.

Porém, há outra solução: no bash, você pode executar seu pvarquivo e fingir que é um arquivo, usando a substituição de processo:

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

Como tal, pode não ser uma boa ideia canalizar coisas para programas que esperam entrada adicional. Pode funcionar de maneira diferente do esperado.

TNW
fonte
Existe alguma maneira de alterar ou corrigir esse comportamento? No momento, tentei o mesmo comando read-from-stdin no Debian e o GPG pediu minha senha.
RAKK 22/01
@RAKK Você pode descriptografar o arquivo resultante?
TNW 22/01
Sim, sem problemas no Debian. Crie um pequeno arquivo com dados aleatórios chamados dsfargeg, criptografe-o com pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, digite uma senha quando solicitado, decodifique a saída com gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, digite sua senha e compare o arquivo original e descriptografado sha256sum dsfargeg dsfargeg.gpg.dec. Ambos os hashes serão os mesmos.
RAKK 22/01
@RAKK Você está certo. Parece que o gpg está abrindo /dev/ttyno Debian. Esta foi a versão 1.4, no entanto, no meu caso; O gpg passou por uma revisão geral desde então. Essa abordagem pode ter sido descartada por algum motivo - você pode descobrir mais por conta própria (ou isso pode ser algum patch específico do Debian). Como tal, provavelmente seria melhor você não contar com isso. Vou procurar em traços, para verificar o que exatamente está acontecendo no gpg mais recente (eu tenho o 2.1).
TNW 22/01
Estranhamente, eu encontrei uma solução! Definir a variável GPG_TTY faz isso por mim. Vou atualizar a resposta de acordo.
TNW 22/01