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.