Tener la clave ssh protegida por passphrase está muy bien, en caso de robo el atacante tendrá que superar un segundo obstáculo, pero también es muy engorroso tener que meter la passphrase cada vez que queremos conectar a algún servidor, para ello tenemos ssh-agent que nos preguntará el password una vez y lo cacheará. De este modo tendremos la key protegida y nuestro trabajo como sysadmin seguirá siendo igual de ágil.
Para iniciar ssh-agent en el arranque de las X es tan sencillo como meter un eval ssh-agent y un ssh-add antes de iniciar el gestor de ventanas, según el sistema Unix que utilicemos tendremos que hacerlo de un modo u otro.
FreeBSD:
vi .xinitrc
setxkbmap es
xrdb .Xresources
xbindkeys &
shutter --min_at_startup &
killall ssh-agent
export SSH_ASKPASS=/usr/local/bin/x11-ssh-askpass ;export SSH_ASKPASS
eval `ssh-agent -s`
ssh-add &
exec ck-launch-session dbus-launch --sh-syntax --exit-with-session awesome
Linux:
vi .xinitrc
setxkbmap es
xrdb /home/kr0m/.Xresources
eval `/usr/bin/ssh-agent`
/usr/bin/ssh-add < /dev/null
exec dbus-launch --sh-syntax --exit-with-session awesome
Shell configuration:
En la configuración de nuestra shell debemos realizar una configuración parecida a esta:
#
# ssh-agent configuration
#
if [ ! -z "$(pgrep ssh-agent)" ]; then
export SSH_AGENT_PID=$(pgrep ssh-agent)
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi
Arranque desde un greeter:
Si arrancamos las X desde un greeter como puede ser GDM, debemos arrancar el sshagent desde el window manager que utilicemos, en mi caso Awesome.
vi .config/awesome/rc.lua
awful.spawn.with_shell("~/.scripts/ssh-init.sh")
vi ~/.scripts/ssh-init.sh
#!/usr/bin/env bash
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s)
fi
export DISPLAY=:0
export SSH_ASKPASS=ssh-askpass
ssh-add ~/.ssh/id_rsa < /dev/null
Método manual:
Si por alguna razón matamos el ssh-agent y no queremos rearrancar las X podemos arrancarlo manualmente:
ssh-add