Tengo un problema al usar el agente gpg sobre ssh a través de una sola línea de comando.
Aquí está mi configuración:
Servidor A: activa el comando a través de ssh.
ssh user@serverB "sudo -E /path/to/script.sh"
Servidor B: ejecutar el script que requiere una firma de frase de contraseña.
Información del sistema: Ubuntu 12.04
He configurado el gpg-agent en el servidor B, he agregado 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 el gpg-agent, disparo manualmente el script:
sudo -E /path/to/script.sh
Luego, el agente gpg me solicita que pida una frase de contraseña, una vez que la configuré, puedo ejecutar el script nuevamente, y está haciendo su tarea sin pedir una frase de contraseña.
Mi problema es cuando trato de activarlo a distancia, por ejemplo, a través de:
ssh user@serverB "sudo -E /path/to/script.sh"
Parece que el gpg-agent no funciona, porque el script sigue pidiéndome una frase de contraseña.
Editar:
He agregado el siguiente contenido a /etc/sudoers.d/user para activar el script a distancia sin la contraseña de sudo y mantener las variables de entorno:
user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh
¿Algunas ideas?
sudo
comando.Respuestas:
Cuando inicie sesión y
ssh user@serverB
luego ejecute manualmente el script, le pedirá 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
, está haciendo un nuevo inicio de sesión cada vez, y no creo que ssh-agent sea compatible con guardar la frase de contraseña en inicios de sesión SSH separados.Keychain parece hacer lo que necesita: http://www.funtoo.org/Keychain
fuente
ssh
cadenas, estás equivocado. Hago esto muchas veces al día;ssh
desde el host A al host B, luego a C y luego a D, con el agente ssh a la cabeza realizando operaciones clave todo el tiempo.sudo -E /path/to/script.sh
en el servidor B, algo aquí requiere la frase de contraseña. EDITAR: aunque, con su comentario en mente, puede tener más sentido para él configurar A como el cliente del agente, y usar el reenvío ssh-agent que le permitiría ejecutar el script en el servidor B sin que le pida una frase de contraseña .