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ÑAEnter same passphrase again: CONTRASEÑAYour identification has been saved in ~/.ssh/id_dsaYour public key is:1024 35 [ ... ] patsy@almacigas.comYour public key has been saved in ~/.ssh/id_dsa.pub
- 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@LancelotEnter 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_dsaNeed passphrase for /home/mah/.ssh/id_dsa (patsy@almacigas.com)Enter passphrase:$ ssh patsy@Lancelotpatsy@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.
Categorías: HOWTO | Redes
