Utilisation de gpg-agent sur ssh

8

J'ai un problème avec gpg-agent sur ssh via une seule ligne de commande.

Voici ma configuration:

Serveur A: déclenchement de la commande via ssh.

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

Serveur B: exécution du script nécessitant une signature de phrase secrète.

Informations système: Ubuntu 12.04

J'ai installé l'agent gpg sur le serveur B, j'ai ajouté cette configuration à /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

Voici la configuration de l'agent dans /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

Donc, pour que cela fonctionne, je me connecte au serverB via ssh:

ssh user@serverB

L'agent gpg est démarré, je déclenche manuellement le script:

sudo -E /path/to/script.sh

Ensuite, l'agent gpg m'invite à demander une phrase secrète, une fois que j'ai configuré la phrase secrète, je peux réexécuter le script et il fait sa tâche sans demander de phrase secrète.

Mon problème est, lorsque j'essaie de le déclencher à distance, par exemple via:

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

Il semble que l'agent gpg ne fonctionne pas, car le script ne cesse de me demander une phrase secrète.

Éditer:

J'ai ajouté le contenu suivant à /etc/sudoers.d/user afin de déclencher le script à distance sans le mot de passe sudo et de conserver les variables d'environnement:

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

Des idées?

Tony
la source
Pardonnez la question, mais êtes-vous sûr qu'il demande une phrase secrète? Avec ce que vous avez montré ci-dessus, je m'attendrais à ce qu'il demande un mot de passe , pour authentifier la sudocommande.
MadHatter
J'ai géré le fichier sudoers avec un NOPASSWD pour l'utilisateur / la commande que j'essaie d'exécuter à distance. J'ai peut-être besoin de préciser cela aussi. Il me demande une phrase secrète.
Tony
OK, cela a du sens; merci pour la clarification, je voulais juste m'assurer que nous n'allions pas être mordus par l'évidence!
MadHatter

Réponses:

1

Lorsque vous vous connectez avec ssh user@serverBpuis exécutez manuellement le script, il vous demandera la phrase secrète la première fois, puis lorsque vous exécuterez le script, shh-agent fournira la phrase secrète stockée.

Cependant, lorsque vous exécutez, ssh user@serverB "sudo -E /path/to/script.shvous effectuez une nouvelle connexion à chaque fois, et je ne pense pas que ssh-agent prendrait en charge l'enregistrement de la phrase de passe sur des connexions SSH distinctes.

Le trousseau semble faire ce dont vous avez besoin: http://www.funtoo.org/Keychain

Avec le trousseau, vous n'avez besoin d'entrer une phrase secrète qu'une fois à chaque redémarrage de votre ordinateur local. Le trousseau facilite également la connexion sécurisée des tâches cron à distance à un processus ssh-agent de longue durée, permettant à vos scripts de tirer parti des connexions basées sur les clés.

La version actuelle du trousseau prend en charge gpg-agent ainsi que ssh-agent.

v25
la source
En ce qui concerne les sshchaînes, vous vous trompez. Je le fais plusieurs fois par jour; sshde l'hôte A à l'hôte B, puis sur C, puis sur D, l'agent ssh en tête effectuant des opérations clés tout le temps.
MadHatter
Ma compréhension est qu'il n'essaie pas de se connecter de A à B en utilisant l'agent. Le serveur B est configuré en tant que client ssh-agent (à toutes fins utiles) et lorsqu'il s'exécute sudo -E /path/to/script.shsur le serveur B, quelque chose ici nécessite la phrase secrète. EDIT: Bien que, avec votre commentaire à l'esprit, il peut être plus logique pour lui de configurer A en tant que client d'agent, et d'utiliser le transfert d'agent ssh qui, à son tour, lui permettrait d'exécuter le script sur le serveur B sans qu'il lui demande une phrase secrète .
v25
Ok, je vais essayer de configurer l'agent gpg sur le serveur A. Vous avez des informations sur le transfert de l'agent ssh? J'ai vu cet article jusqu'à présent: superuser.com/questions/161973/…
Tony
Ceci est bien documenté, voici un guide: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25
v25, mes excuses, on dirait que vous aviez raison. Tony, cela ne fonctionnera jamais si vous exécutez l'agent sur B, car la connexion n'est pas persistante.
MadHatter