Tengo un problema al utilizar gpg-agent a través de ssh a través de una única línea de comando.
Aquí está mi configuración:
Servidor A: activando el comando a través de ssh.
ssh user@serverB "sudo -E /path/to/script.sh"
Servidor B: ejecutando el script que requiere una firma de contraseña.
Información del sistema: Ubuntu 12.04
Configuré el agente gpg en el servidor B, agregué esta configuración 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
Aquí está la configuración del agente en /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
Entonces, para que esto funcione, me conecto al servidor B a través de ssh:
ssh user@serverB
Se inicia gpg-agent, activo manualmente el script:
sudo -E /path/to/script.sh
Luego, el agente gpg me solicita una frase de contraseña. Una vez que la he configurado, puedo ejecutar el script nuevamente y realiza su tarea sin solicitar una frase de contraseña.
Mi problema es que cuando intento activarlo de forma remota, por ejemplo, a través de:
ssh user@serverB "sudo -E /path/to/script.sh"
Parece que el agente gpg no funciona porque el script sigue pidiéndome una frase de contraseña.
Editar:
Agregué el siguiente contenido a /etc/sudoers.d/user para activar el script de forma remota sin la contraseña de sudo y mantener las variables de entorno:
user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh
¿Algunas ideas?
Respuesta1
Cuando inicie sesión y ssh user@serverB
luego ejecute manualmente el script, le solicitará la frase de contraseña la primera vez, luego, cuando ejecute el script, shh-agent le proporcionará la frase de contraseña almacenada.
Sin embargo, cuando ejecuta, ssh user@serverB "sudo -E /path/to/script.sh
realiza un nuevo inicio de sesión cada vez, y no creo que ssh-agent admita guardar la frase de contraseña en inicios de sesión SSH separados.
El llavero parece hacer lo que necesita:http://www.funtoo.org/Keychain
Con el llavero, solo necesita ingresar una frase de contraseña una vez cada vez que reinicia su máquina local. Keychain también facilita que los trabajos cron remotos se "conecten" de forma segura a un proceso de agente ssh de larga ejecución, lo que permite que sus scripts aprovechen los inicios de sesión basados en claves.
La versión actual de Keychain admite gpg-agent y ssh-agent.