Cambiando el puerto de rsync

Y porque este blog me sirve para recopilar esas pequeñas cosas útiles que podrían desaparecer de la red, esta entrada es para un pequeño tip sobre rsync.

Previamente platiqué sobre esta herramienta como un reemplazo para las utilidades de copia con mayores funcionalidades.

Hoy me encontré con un problema: ¿Cómo ocupar rsync para acceder a un servidor SSH en otro puerto?

Pues bien, esta es la solución:

Recordando el viejo comando del otro artículo

rsync -avzP midirectorio usuario@servidor:~/directoriodestino

Suponiendo que el puerto SSH en esta ocasión es el 1500 por dar un ejemplo, el comando nos queda así

rsync -avzP --rsh='ssh -p1500' midirectorio usuario@servidor:~/directoriodestino

Como un plus, también podemos usar SCP con otro puerto otro puerto para casos menos complejos:

scp -P1500 archivo usuario@servidor:~/archivodestino

Keepalive en SSH

Durante mucho tiempo, he tenido algunos problemas con ciertos ISP en aplicaciones que requieren conexiones permanentes para funcionar, pues después de un tiempo de inactividad simplemente las cierra. Esto puede pasar también con ciertos firewalls.

Mi problema particular es el siguiente: para mí es necesario tener más de una sesión SSH para poder administrar servidores rápidamente. El problema viene cuando después de algunos minutos de inactividad, la conexión SSH muere por la razón anterior.

Esto tiene varias soluciones:

En clientes Linux, es posible añadir una opción al archivo /etc/ssh/ssh_config:

ServerAliveInterval 1000

En ocasiones no tenemos acceso a ese archivo, porque la cuenta con que operamos no tiene permisos administrativos. Entonces, podemos añadir lo siguiente al archivo /home/user/.ssh/config

Host *
ServerAliveInterval 1000

Y esa sería una buena solución para cualquier caso. Lamentablemente, yo no siempre uso Linux 😀

Así que en Windows, entre los clientes SSH que existen, mi favorito es PuTTY. Dicho programa permite activar una opción similar. La desventaja es que hay que hacerlo para cada vez que se haga una conexión.

Bueno, pues en mi caso, tengo una máquina Linux que me sirve como intermediario para rutear conexiones a una red local. Y este es el caso común que va desde un pequeño ciber café hasta grandes redes en empresas. Entonces, ¿por qué no buscar una solución para toda la red local?

La solución es la siguiente:

echo 1000 > /proc/sys/net/ipv4/tcp_keepalive_time

Esto nos permite mandar un keep-alive para cualquier conexión TCP. Con esto, solucionamos el problema de SSH y de cualquier otro protocolo que utilice el stack TCP, así como lo soluciona para toda la red local.

Un valor que funciona para mí es 200, es decir, poco más de 3 minutos.