Usando gpg-agent sobre ssh

7

Estou com um problema usando o gpg-agent sobre o ssh por meio de uma única linha de comando.

Aqui está minha configuração:

Servidor A: acionando o comando via ssh.

ssh user@serverB "sudo -E /path/to/script.sh"

Servidor B: Executando o script que requer uma assinatura de frase de acesso.

Informações do sistema: Ubuntu 12.04

Configurei o gpg-agent no servidor B, adicionei essa configuração ao /home/user/.bashrc:

Invoke GnuPG-Agent the first time we login.                                                                          
# Does '~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 'cut -d: -f 2 $HOME/.gpg-agent-info' 2>/dev/null; then
    GPG_AGENT_INFO='cat $HOME/.gpg-agent-info | cut -c 16-'
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval 'gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info'
fi
export GPG_TTY='tty'
export GPG_AGENT_INFO

Aqui está a configuração do agente em /home/user/.gnupg/gpg-agent.conf:

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

Então, para fazer isso funcionar, eu me conecto ao serverB via ssh:

ssh user@serverB

O gpg-agent é iniciado, eu disparo manualmente o script:

sudo -E /path/to/script.sh

Então, o gpg-agent me avisa pedindo uma senha, uma vez que eu configurei a senha, eu posso rodar o script novamente, e ele está fazendo sua tarefa sem pedir um passhprase.

Meu problema é, quando tento ativá-lo de longe, por exemplo via:

ssh user@serverB "sudo -E /path/to/script.sh"

Parece que o gpg-agent não está funcionando, porque o script continua me pedindo uma frase secreta.

Editar:

Eu adicionei o seguinte conteúdo ao /etc/sudoers.d/user para acionar o script de forma distante sem a senha do sudo e para manter as variáveis de ambiente:

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

Alguma idéia?

    
por Tony 19.12.2013 / 10:53

1 resposta

1

Quando você faz o login com ssh user@serverB , em seguida, executa manualmente o script, ele pedirá a senha pela primeira vez e, quando você executar o script, o shh-agent fornecerá a frase secreta armazenada.

No entanto, quando você executa ssh user@serverB "sudo -E /path/to/script.sh , você está fazendo um novo login a cada vez, e eu não acho que o ssh-agent suporta salvar a senha em logons SSH separados.

O Keychain parece fazer o que você precisa: link

With keychain, you only need to enter a passphrase once every time your local machine is rebooted. Keychain also makes it easy for remote cron jobs to securely "hook in" to a long running ssh-agent process, allowing your scripts to take advantage of key-based logins.

The current version of keychain supports gpg-agent as well as ssh-agent.

    
por 24.12.2013 / 13:19

Tags