Usando gpg-agent sobre ssh

Usando gpg-agent sobre ssh

Estou tendo problemas ao usar o agente gpg sobre 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 senha.

Informações do sistema: Ubuntu 12.04

Eu configurei o gpg-agent no servidor B, adicionei esta 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 que isso funcione, eu me conecto ao serverB via ssh:

ssh user@serverB

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

sudo -E /path/to/script.sh

Em seguida, o gpg-agent me solicita uma senha. Depois de configurar a senha, posso executar o script novamente e ele executa sua tarefa sem solicitar uma senha.

Meu problema é quando tento acioná-lo remotamente, 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 senha.

Editar:

Adicionei o seguinte conteúdo a /etc/sudoers.d/user para acionar o script remotamente sem a senha sudo e para manter as variáveis ​​de ambiente:

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

Alguma ideia?

Responder1

Quando você faz login ssh user@serverBe executa manualmente o script, ele solicitará a senha pela primeira vez e, quando você executar o script, o shh-agent fornecerá a senha armazenada.

No entanto, quando você executa, ssh user@serverB "sudo -E /path/to/script.shvocê faz um novo login a cada vez, e não acho que o ssh-agent suportaria salvar a senha em logins SSH separados.

O chaveiro parece fazer o que você precisa:http://www.funtoo.org/Keychain

Com as chaves, você só precisa inserir uma senha uma vez sempre que sua máquina local for reinicializada. O Keychain também facilita que tarefas cron remotas se "conectem" com segurança a um processo de agente ssh de longa execução, permitindo que seus scripts aproveitem logins baseados em chave.

A versão atual do keychain suporta gpg-agent e também ssh-agent.

informação relacionada