miércoles, 13 de noviembre de 2013

SSH avanzado - Multiples Hosts a la vez y conexión automática a través de un pivot host

Llegó el momento de administrar varios servidores, y a veces las tareas se vuelven un poco repetitivas, especialmente cuando los servers que estás administrando son replicas para obtener alta disponibilidad: las configuraciones, ubicación de archivos, paquetes instalados, etc, son iguales en todos los servers. Entonces para que ejecutar actualizaciones y cambios de configuraciones secuencialmente si se puede hacer todo junto?

Para esto recurrí a una herramienta indispensable para los sysadmins que manejan varios servers: ClusterSSH, o "el pulpo", como lo llama el gran sysadmin Germán, a quién vi manejando unos 30 servers a la vez.

ClusterSSH se conecta a varios servers a la vez, abriendo una ventana de xterm por cada server, y una ventana extra donde ingresas comandos y estos se replican a todos los servers conectados (o podés elegir a cuales desde uno de los menúes). Si querés ejecutar algo solo en un server, seleccionas la ventana adecuada y listo. Super simple.

En mi caso, el problema para usarlo era que me conecto a todos mis servers desde un server que uso como pivot, de esta forma tengo mi 'estación de trabajo' principal en la nube y puedo acceder desde cualquier lado. Como el ClusterSSH necesita X (usa xterm), levantarlo en mi server pivot no es una opción muy satisfactoria ya que acá en el fin del mundo la velocidad de conexión no es tan buena como para levantar aplicaciones X remotas.

Acá entra en juego la versatilidad de ssh, si puedo hacer que desde mi notebook se conecte a un server pasando automáticamente por el pivot, seguramente puedo usar ClusterSSH local en mi notebook sin tener que abrir el acceso a todos mis servers.

La configuración es muy simple, todo va en el ~/.ssh/config:

Host pivot
    Hostname pivot.example.com

Host server1
    ProxyCommand ssh -q pivot -nc -q0 server1

Host server2
    ProxyCommand ssh -q pivot -nc -q0 server2


Para que esto funcione, tenemos que tener acceso a pivot.example.com, y desde este server poder acceder por ssh a los servers server1 y server2 (tiene que poder resolver los host names como los ponemos aca). Si usamos usuarios diferentes en los servers, se indican con la opción User.

Para probar, desde tu máquina local haces: 'ssh server1' o 'ssh server2', ambos deberían conectarse directamente a los servers pasando por la máquina pivot.

Ahora que todo funciona, instalás 'el pulpo' y entrás a los dos (o n) servers a la vez:

$ sudo apt-get install clusterssh
...
$ cssh server1 server2

Y empieza la diversión... y si, la gente de sistemas somos vagos por definición.

Imagen sacada de la web, créditos a quién corresponda.