HOWTO ssh-agent

De GULA Wiki

Tabla de contenidos

Introducción

Con este tutorial crearemos una conexión segura entre dos ordenadores sin necesitad de contraseñas. Este método no es tan seguro como meter la contraseña cada vez, ya que se establece una especie de "confianza ciega" entre hosts, delegando al programa ssh-agent el manejo de las contraseñas. Pero para conexiones caseras en una LAN es lo suficientemente seguro (si no se te han metido dentro ya, claro).


Manos a la obra

Supongamos que tenemos un escritorio con hostname Arturo y un portátil Lancelot. Queremos conectar al portátil para sincronizar datos con nuestro escritorio. Pero es un tostonazo porque cada vez que queremos hacer algo nos pide la contraseña.

Para solucionar esto instalamos en ambos ordenadores OpenSSH y seguimos los siguientes pasos :

  • Generamos una clave DSA en Arturo. Para ello utilizamos la orden :
$ ssh-keygen -t dsa -f ~/.ssh/id_dsa -C "patsy@almacigas.com"
Enter passphrase (empty for no passphrase): CONTRASEÑA
Enter same passphrase again: CONTRASEÑA
Your identification has been saved in ~/.ssh/id_dsa
Your public key is:
1024 35 [ ... ] patsy@almacigas.com
Your public key has been saved in ~/.ssh/id_dsa.pub
NOTA
Donde pone CONTRASEÑA debeis introducir una contraseña para proteger la clave. Es muy importante que la contraseña sea segura. Nada de "123456" o tarde o temprano algún listillo os la reventará.
NOTA
Aseguraos de que la carpeta ~/.ssh/ está en vuestro $HOME. El email "patsy@almacigas.com" es un simple identificador de clave, no tiene porque ser un dominio que resuelva.
  • El archivo ~/.ssh/id_dsa.pub contiene nuestra clave pública. Necesitamos que la clave de Arturo esté en la "lista de confianza" de Lancelot. Tenemos que copiar esta clave al portátil. Esta operacion la podemos hacer de un modo seguro con la siguiente orden :
$ cat ~/.ssh/id_dsa.pub | ssh patsy@Lancelot 'cat - >> ~/.ssh/authorized_keys'
patsy@Lancelot password:
$

Y ya está. Si queremos acceder al portatil como otro usuario distinto de "patsy", debemos cambiar el usuario y repetir la orden tantas veces como sea necesario.

  • Ahora verificaremos si ha funcionado todo. Desde Arturo entraremos a Lancelot :
$ ssh patsy@Lancelot
Enter passphrase for DSA key 'patsy@almacigas.com':
patsy@Lancelot:~$

Activando ssh-agent

ssh-agent es el que se encargará de recordar las contraseñas por tí. Pero para que funcione, necesitamos tenerlo funcionando primero como "daemon" o proceso en segundo plano del sistema. Si usas GNOME con el gestor de inicio GDM, no necesitas más. GDM arranca ssh-agent al iniciar. Si usas KDE, tienes que asegurarte de que el fichero /usr/kde/3.4/env/agent-startup.sh tiene permisos de ejecución, y de que su contenido carga el ssh-agent.

Si usas la orden "startx" para arrancar X Windows. Necesitas modificar tu fichero de configuración .xsession para que ssh-agent se lance con el entorno o gestor de ventanas que tu elijas. Por ejemplo, si usara KDE y "startx" para iniciar las X, el contenido de mi .xsession sería este :

ssh-agent startkde

El comportamiento de esta orden es simple. ssh-agent crea las conexiones necesarias, cambia un par de variables de entorno y lanza kde. Ahora todos los programas de KDE usarán ssh-agent automáticamente. Si usaramos windowmaker a pelo, el contenido del archivo sería similar :

ssh-agent wmaker

Consoleros anónimos

Si pasas de X y lo tuyo es la consola. Igualmente puedes beneficiarte de ssh-agent. Sólo tienes que añadir esto a tu ~/.$SHELL_profile. Como yo uso bash, el archivo es ~/.bash_profile :

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

Y se arrancará ssh-agent con el primer login.

Si algunas veces quedan procesos ssh-agent colgando, no tienes más que añadir esto al .bash_logout :

if [ ${SSH_AGENT_PID+1} == 1 ]; then ssh-add -D
    ssh-agent -k > /dev/null 2>&1
    unset SSH_AGENT_PID
    unset SSH_AUTH_SOCK
fi

Al fin, sin contraseñas

Una vez tenemos a ssh-agent chutando en segundo plano. Debemos añadir nuestra clave pública en su base de datos con la orden "ssh-add". El programa nos pedirá la clave DSA de patsy por última vez :

$ ssh-add ~/.ssh/id_dsa
Need passphrase for /home/mah/.ssh/id_dsa (patsy@almacigas.com)
Enter passphrase:
$ ssh patsy@Lancelot
patsy@Lancelot:~$

¡Por fin!. Es posible que no funcione si los permisos de la carpeta ~/.ssh/ y el archivo ~/.ssh/authorized_keys en Lancelot son escribibles por el grupo del usuario u otros usuarios. Para solucionar esto, accede a Lancelot mediante el método normal y usa la orden :

$ chmod -R go-rw ~/.ssh

Con esto debería funcionar.

Herramientas personales
Asociación