Desabilita o gnome de perguntar passphrase na GUI ao usar ssh e gpg do terminal [duplicate]

5

Desde que eu instalei o Ubuntu Desktop 16.10 Gnome (anteriormente eu tinha 15.10), fiquei chateado com o fato de que sempre que eu tento adicionar uma chave SSH ou importar uma chave GPG usando o terminal uma caixa pop-up GUI aparece pedindo frase secreta.

Com o SSH, resolvo esse problema iniciando um novo agente no terminal e, em seguida, tentando adicionar a chave. E finalmente, ele me pede a senha no TTY ou não uma GUI.

Com o GPG, comecei a aprendê-lo, então não tenho certeza de como resolvê-lo.

Existe uma maneira de desabilitar isso e fazer com que eles peçam a senha no TTY quando acessados pelo TTY?

Eu li as respostas em esta pergunta, mas é sobre o ubuntu 12.04 e as duas principais respostas não funcionaram eu.

    
por Starx 08.12.2016 / 10:29

1 resposta

6

O SSH e o GPG usam os chamados "agentes" para armazenar em cache as chaves privadas descriptografadas, para que os usuários não tenham que inserir suas frases secretas o tempo todo. Por padrão, eles usam o programa pinentry para essa finalidade.

Antes de continuarmos, vamos garantir que um exemplo de programa de entrada de pinos de linha de comando esteja disponível em seu sistema. No repositório do Ubuntu, temos pinentry-curses (desde sempre) e pinentry-tty (desde o Xenial), mas eles não são instalados por padrão. Você pode obtê-lo do pacote com o mesmo nome:

sudo apt install pinentry-curses

Definindo um programa de entrada de pinos diferente

Você pode ajustar o programa usado para entrada de pinos:

  • (por usuário) Definindo pinentry-program no seu ~/.gnupg/gpg-agent.conf como um programa de entrada de pinos da linha de comandos, e. g .:

    pinentry-program /usr/bin/pinentry-curses
    

    Você precisa reiniciar o agente ou atualizá-lo:

    gpg-connect-agent <<< RELOADAGENT
    
  • (todo o sistema) Em todas as distribuições comuns do Linux, incluindo o Ubuntu, o programa pinentry padrão é, na verdade, um link simbólico para o programa real de entrada de pinos. O destino deste link simbólico é gerenciado pelo sistema update-alternatives . Você pode usá-lo para alterar o destino do link para um programa de entrada de pinos da linha de comando:

    sudo update-alternatives --config pinentry
    

Escolhendo o programa de entrada de pinos com base na disponibilidade de um terminal

A desvantagem de ambos os métodos é que você não poderá usar uma entrada de pino de linha de comando se SSH ou GPG forem invocados a partir de um programa em execução sem um terminal, e. g. um cliente SFTP gráfico ou um agente de usuário de email. Uma maneira melhor seria usar o programa gráfico de entrada de pinos somente quando um servidor X estiver disponível e um terminal estiver un disponível. Para isso, precisaremos de um pequeno script de wrapper que analise o ambiente antes de adiar para o programa de entrada de pinos correto.

Vamos supor que temos o seguinte shell script executável em ~/.local/bin/my-smart-pinentry :

#!/bin/sh
set -eu

# Configuration -- adjust these to your liking
PINENTRY_TERMINAL='/usr/bin/pinentry-curses'
PINENTRY_X11='/usr/bin/pinentry-x11'

# Action happens below!
if [ -n "${DISPLAY-}" -a -z "${TERM-}" ]; then
    exec "$PINENTRY_X11" "$@"
else
    exec "$PINENTRY_TERMINAL" "$@"
fi

Para usar este wrapper como o "programa" de entrada de pinos, você pode usar o método por usuário mencionado acima. Você também pode adicioná-lo ao banco de dados update-alternatives .

    
por David Foerster 09.12.2016 / 22:55