Solicitação silenciosa de senha GnuPG com comandos bash

6

Estou tentando esconder a "saída" de um comando gnupg, mas parece que é sempre impresso.

o comando é:

echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null

É um comando para verificar a senha das chaves pgp, e usá-lo assim:

a=$(echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null)

Eu recupero a saída:

echo $a [GNUPG:] USERID_HINT F02346C1EA445B6A p7zrecover (7zrecover craking pgp test) <a@a> [GNUPG:] NEED_PASSPHRASE F02346C1EA445B6A F02346C1EA445B6A 1 0 [GNUPG:] GOOD_PASSPHRASE [GNUPG:] BEGIN_SIGNING [GNUPG:] SIG_CREATED S 1 8 00 1435612254 8AE04850C3DA5939088BE2C8F02346C1EA445B6A

o problema é que quando eu uso o comando, o console imprime:

You need a passphrase to unlock the secret key for user: "test (test) <a@a>" 1024-bit RSA key, ID EA445B6A, created 2015-06-29

Eu tenho tentado usar redirecionamentos de comando como &>/dev/null e coisas assim, mas o texto de frase secreta é sempre impresso. É possível esconder este texto?

    
por Rafael Senties Martinelli 29.06.2015 / 23:14

3 respostas

6

O "problema" é que gpg escreve diretamente no TTY em vez de STDOUT ou STDERR. Isso significa que não pode ser redirecionado.

Você pode usar a opção --batch conforme sugerido por daniel, mas como uma abordagem mais geral você pode usar a ferramenta script , que falsifica um TTY. Qualquer saída é então enviada para STDOUT, para que você possa redirecioná-la para /dev/null :

script -c 'echo "thisprogramwørks" | gpg -q --status-fd 1 --no-use-agent --sign --local-user D30BDF86 --passphrase-fd 0 --output /dev/null' > /dev/null

A saída também é gravada em um arquivo, portanto você ainda pode obtê-lo e analisá-lo. Veja man script ( link )

    
por 29.06.2015 / 23:38
4

Adicione a opção --batch .

Se você gostaria de obter o mesmo resultado através do redirecionamento, você teria que fechar o STDIN através de:

gpg … <&-
    
por 29.06.2015 / 23:23
0

A% man_de% manpage também lista uma opção gpg :

--no-tty

Make sure that the TTY (terminal) is never used for any output. This option is needed in some cases because GnuPG sometimes prints warnings to the TTY even if --batch is used.

    
por 08.12.2015 / 19:37