Usando gpg-agent sobre ssh

8

Estou tendo um problema ao usar o gpg-agent sobre ssh através 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 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

Portanto, para fazer isso funcionar, 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 configurá-la, posso executar o script novamente, e ele está executando sua tarefa sem solicitar uma senha.

Meu problema é que, quando tento acioná-lo à distância, 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 ao /etc/sudoers.d/user para acionar o script à distância sem a senha sudo e manter as variáveis ​​de ambiente:

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

Alguma ideia?

Tony
fonte
Perdoe a pergunta, mas você tem certeza de que está pedindo uma senha? Com o que você mostrou acima, eu esperaria que ele solicitasse uma senha para autenticar o sudocomando.
MadHatter
Eu gerenciei o arquivo sudoers com um NOPASSWD para o usuário / comando que tento executar à distância. Talvez eu precise precisar disso também. Está me pedindo uma senha.
24413 Tony
OK, isso faz sentido; obrigado por esclarecer, eu só queria ter certeza de que não estávamos sendo mordidos pelo óbvio!
MadHatter

Respostas:

1

Quando você faz o 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ê está fazendo um novo login a cada vez, e não acho que o ssh-agent suportaria salvar a senha em logins SSH separados.

As chaves parecem fazer o que você precisa: http://www.funtoo.org/Keychain

Com o chaveiro, você só precisa digitar uma senha uma vez toda vez que sua máquina local for reiniciada. O Keychain também facilita para que tarefas remotas do cron se conectem com segurança a um processo ssh-agent de longa execução, permitindo que seus scripts aproveitem os logins baseados em chaves.

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

v25
fonte
No que diz respeito às sshcorrentes, você está errado. Eu faço isso muitas vezes ao dia; sshdo host A ao host B, depois ao C e depois ao D, com o agente ssh na cabeça realizando operações importantes o tempo todo.
precisa
Meu entendimento é que ele não está tentando se conectar de A a B usando o agente. O servidor B é configurado como o cliente ssh-agent (para todos os efeitos) e quando ele é executado sudo -E /path/to/script.shno servidor B, algo aqui está exigindo a senha. EDIT: Embora, com o seu comentário em mente, possa fazer mais sentido para ele configurar A como o cliente do agente e usar o encaminhamento ssh-agent, que por sua vez permitiria executar o script no servidor B sem solicitar uma senha. .
v25
Ok, vou tentar configurar o gpg-agent no servidor A. Você tem algumas informações sobre o encaminhamento do ssh-agent? Eu já vi este post até agora: superuser.com/questions/161973/…
Tony
Isso está bem documentado, aqui está um guia: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25
v25, minhas desculpas, parece que você estava certo. Tony, nunca funcionará se você executar o agente em B, porque a conexão não é persistente.
MadHatter