Las versiones de OpenSSH posteriores a la 3.9 permiten que varias sesiones SSH compartan la misma conexión. Compartir la conexión significa que los procesos de establecimiento de la conexión TCP/IP, intercambio de claves, autentificación, negociación del tipo de cifrado, etc. se realizan sólamente durante la primera conexión a una máquina. Ello aumenta la eficiencia de las sucesivas conexiones a la misma máquina. Cuando se establece la primera sesión - denominada maestra - se crea un socket unix en el cliente. Las subsiguientes sesiones a la misma máquina se conectan a la sesión maestra usando el socket unix. La sesión maestra crea entonces una nueva conexión dentro de la sesión que es utilizada por el cliente SSH.
Para activar la compartición de la conexión ponemos las siguietnes líneas en nuestro fichero de configuración:
/.ssh$ head -4 config Host * ControlMaster auto ControlPath /home/lusasoft/.ssh/sockets/%r@%h:%p
El valor auto
para la opción ControlMaster
le indica al cliente SSH que si ya existe un socket
disponible se reutilice. En caso contrario se crea uno nuevo.
La opción ControlPath
define el camino en el que se guardará dicho socket
asi como localizarlo para su reutilización por las posteriores conexiones.
La cadena de formato %r@%h:%p
especifica el formato
del nombre del socket. Así, después de una conexión SSH el directorio
sockets
contiene:
~/.ssh$ ls -ltr sockets/ total 0 srw------- 1 lusasoft lusasoft 0 2009-06-25 22:10 user@some.machine.ull.es:22
Por supuesto, el primer paso es crear el camino:
~/.ssh$ mkdir -m 700 ~/.ssh/sockets/
Podemos ver la mejora. En una terminal controlamos el tiemppo de ejecutar un comando remoto:
$ time ssh europa echo Hola! Hola! real 0m1.280s user 0m0.008s sys 0m0.004sAhora abrimos una conexión SSH con la máquina:
$ ssh europa Linux europa 2.6.24-24-generic #1 SMP Wed Apr 15 15:11:35 UTC 2009 x86_64 casiano@europa:~$Ahora en otra terminal volvemos a cronometrar la ejecución del comando remoto anterior:
$ time ssh europa echo Hola! Hola! real 0m0.197s user 0m0.004s sys 0m0.004sVemos que el tiempo ha disminuido.
-M
para obtener el mismo efecto.
Se acompaña de la opción -S
para especificar el socket:
ssh -M -S ~/.ssh/socket/user_at_remote remote.ull.esLas subsiguientes sesiones especifican la opción
-S
para especificar el socket:
ssh -S ~/.ssh/socket/user_at_remote remote.ull.es
-M
son:
yes
Se convierte en sesión maestra
no
No se convierte en maestra, busca una maestra
ask
Preguntar al usuario
auto
Si es la primera se convierte en maestra sino buscar una maestra
autoask
kill -9
) la sesión maestra
también se matan las sesiones que comparten la conexión