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?
sudo
commande.Réponses:
Lorsque vous vous connectez avec
ssh user@serverB
puis 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.sh
vous 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
la source
ssh
chaînes, vous vous trompez. Je le fais plusieurs fois par jour;ssh
de 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.sudo -E /path/to/script.sh
sur 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 .