sábado, agosto 01, 2015

Multiplexar conexiones ssh

Las últimas versiones de OpenSSH tienen una funcionalidad que permite usar una única conexión ssh para multiplexar varios canales. Se abre y autentifica la primera conexión, y de manera automática, se usa ésta para establecer el resto de canales con la mísma máquina. Es el mismo mecanismo que se utiliza en el forwarding de X11 pero aplicado a todas las conexiones ssh.

Cuando se configura de esta manera el ssh, se establece una conexión master la cual abre un socket Unix y se pone a la escucha en el mismo. Cuando se quiere conectar con la misma máquina, el proceso ssh intentará usar este socket. En caso de que no se pueda, realizará la conexión de manera habitual en función de como hayamos configurado la multiplexación de conexiones.

Para configurar la multiplexación de conexiones hay que modificar el fichero $HOME/.ssh/config y usar las opciones ControlMaster, ControlPath y ControlPersist. Si queremos que sólo estén activas estas opciones para los host de la red 192.168.120.0/24, sería necesario modificar el fichero de la siguiente manera:

host 192.168.120.*
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 300

Controlmaster activa la multiplexación de conexiones y se activa en modo auto. Esto quiere decir que ssh intentará usar la compartición de conexiones y si no está disponible, usará la conexión normal. ControlPath establece la ruta donde se creará el socket Unix que crea ssh para escuchar conexiones y multiplexarlas. Como puede verse en la ruta existe ciertas plantillas que se sustituyen por sus valores: %r es el usuario remoto usado para conectar, %h es el nombre del host y %p es el puerto remoto que se está usando. ControlPersist controla el comportamiento del ssh una vez que se ha cerrado la conexión master. Si vale yes, ssh pasa a segundo plano de manera indefinida, esperando más conexiones, si vale no se cerrará la conexión y en caso de que especifique un valor de tiempo, estará en segundo plano el tiempo que se especifique y finalizará si no hay nuevas conexiones o tráfico.

En la primera captura de pantalla se ve dos conexiones ssh sin compartir el socket. En la segunda se puede ver la multiplexación de conexiones con netstat -na --inet (las opciones de este comando son sólo válidas en Linux)


ssh sin multiplexar

ssh multiplexado

No hay comentarios: