Usando gpg-agent su ssh


8

Sto riscontrando un problema con l'utilizzo dell'agente gpg su ssh tramite una singola riga di comando.

Ecco la mia configurazione:

Server A: attivazione del comando tramite ssh.

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

Server B: esecuzione dello script che richiede una firma passphrase.

Informazioni di sistema: Ubuntu 12.04

Ho installato l'agente gpg sul server B, ho aggiunto questa configurazione a /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

Ecco la configurazione dell'agente in /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

Quindi, per far funzionare tutto ciò, mi collego al serverB tramite ssh:

ssh user@serverB

L'agente gpg è avviato, innesco manualmente lo script:

sudo -E /path/to/script.sh

Quindi, l'agente gpg mi richiede di chiedere una passphrase, una volta che ho impostato la passphrase, posso eseguire nuovamente lo script e sta facendo il suo compito senza chiedere una passhprase.

Il mio problema è che quando provo ad attivarlo a distanza, ad esempio tramite:

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

Sembra che l'agente gpg non funzioni, perché lo script continua a chiedermi una passphrase.

Modificare:

Ho aggiunto il seguente contenuto a /etc/sudoers.d/user per attivare lo script in remoto senza la password sudo e mantenere le variabili di ambiente:

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

Qualche idea?


Perdona la domanda, ma sei sicuro che stia chiedendo una passphrase? Con quello che hai mostrato sopra, mi aspetto che richieda una password per autenticare il sudocomando.
MadHatter,

Ho gestito il file sudoers con un NOPASSWD per l'utente / comando che cerco di eseguire a distanza. Potrei aver bisogno di precisare anche questo. Mi sta chiedendo una passphrase.
Tony,

OK, ha senso; grazie per il chiarimento, volevo solo assicurarmi di non essere morsi dall'ovvio!
MadHatter,

Risposte:


1

Quando si accede con ssh user@serverBquindi eseguire manualmente lo script, verrà richiesta la passphrase per la prima volta, quindi quando si esegue lo script shh-agent fornirà la passphrase memorizzata.

Tuttavia, quando esegui, ssh user@serverB "sudo -E /path/to/script.shstai facendo un nuovo accesso ogni volta, e non credo che ssh-agent sosterrebbe il salvataggio della passphrase su accessi SSH separati.

Il portachiavi sembra fare ciò di cui hai bisogno: http://www.funtoo.org/Keychain

Con il portachiavi, devi solo inserire una passphrase una volta ogni volta che il tuo computer locale viene riavviato. Il portachiavi semplifica inoltre i processi cron remoti di "agganciarsi" in modo sicuro a un processo ssh-agent di lunga durata, consentendo agli script di sfruttare gli accessi basati su chiavi.

L'attuale versione del portachiavi supporta gpg-agent e ssh-agent.


Per quanto riguarda le sshcatene, ti sbagli. Lo faccio più volte al giorno; sshdall'host A all'host B, quindi su C, quindi su D, con l'agente ssh in testa che esegue le operazioni chiave per tutto il tempo.
MadHatter,

La mia comprensione è che non sta cercando di connettersi da A a B utilizzando l'agente. Il server B è configurato come client ssh-agent (a tutti gli effetti) e quando viene eseguito sudo -E /path/to/script.shsul server B, qualcosa qui richiede la passphrase. EDIT: Anche se, con il tuo commento in mente, potrebbe avere più senso per lui configurare A come client agente e usare l'inoltro di ssh-agent che a sua volta gli consentirebbe di eseguire lo script sul server B senza che richieda una passphrase .
v25

Ok, proverò a configurare l'agente gpg sul server A. Hai qualche informazione sull'inoltro di ssh-agent? Ho visto questo post finora: superuser.com/questions/161973/…
Tony

Questo è ben documentato, ecco una guida: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25

v25, le mie scuse, sembra che tu abbia ragione. Tony, non funzionerà mai se esegui l'agente su B, perché la connessione non è persistente.
MadHatter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.