Con frecuencia los administradores de sistemas tenemos que gestionar en nuestro trabajo más de un servidor de forma remota por SSH. En ocasiones se hace tedioso tener que estar introduciendo credenciales para cada servidor con el que nos conectamos, o incluso recordar todos aquellos que tenemos que administrar. En Windows he utilizado unos cuantos gestores SSH dignos de mención, como por ejemplo mRemoteNG, MobaXterm o Bitvise. En Linux también disponemos de varios gestores como SecureCRT (de pago) o PAC Manager que cumplen perfectamente su función. Un gestor algo “distinto” llamó mi atención: ClusterSSH. Éste nos permite:
- Gestión de conexiones SSH con cada servidor. En este sentido es prácticamente igual que un cliente SSH tradicional.
- Gestión centralizada de clúster de servidores SSH con una única terminal. Imagina que tienes que lanzar el mismo comando (por ejemplo, una actualización
apt-get update && apt-get upgrade
) en 30 servidores. Con ClusterSSH puedes hacerlo fácilmente, lo que nos permite optimizar bastante tiempo.
Está disponible para Solaris, FreeBSD, GNU/Linux y Mac OSX. La instalación es muy sencilla, ya que en el caso de Linux ya lo tenemos disponible desde repositorios. Si estamos en Debian o derivadas:
aptitude install clusterssh
Y en Red Hat o derivadas:
yum install clusterssh
Configuración básica de ClusterSSH
La sintaxis básica del programa es:
cssh usuario@maquina1 usuario@maquina2 ...
De esta manera, se abrirán tantas consolas SSH como argumentos le pasemos al programa. En cada consola SSH que se abra además tendremos que introducir nuestras credenciales. Para poner un ejemplo, este es mi entorno de pruebas:
- Anfitrión Debian con IP 192.168.2.114. Desde esta máquina conectaré por SSH con los servidores remotos.
- Servidor ubserver1 con IP 192.168.2.130
- Servidor ubserver2 con IP 192.168.2.131
Pues bien, para conectar desde mi amado Debian a esos dos servidores (que por cierto, son Ubuntu Server 12.04), desde terminal introduzco:
cssh jota@192.168.2.130 jota@192.168.2.131
Y obtengo lo siguiente:
Atención a la siguiente consola:
Desde ahí todo lo que introduzcamos se replicará al resto de terminales SSH abiertas. Es una especie de “terminal de cluster”. Por eso se llama clusterSSH, porque podemos administrar todos los servidores con los que tenemos conexión como un todo, como comentaba anteriormente. En este caso, si en ambos nodos tenemos la misma contraseña para ese usuario, podemos introducirla en la ventana de clusterSSH y presionar Intro. Debería hacer login en las otras dos consolas (servidores). Otro ejemplo: después de hacer login si hacemos un df -h en la consola de clusterSSH, obtenemos el resultado en ambos servidores:
Más comodidad configurando los servidores en ~/.ssh/config
En el fichero ~/.ssh/config
podemos definir los usuarios con los que conectamos a los hosts remotos, siguiendo la siguiente sintaxis:
host [nombre personalizado de máquina] hostname [hostname real de la máquina] user [usuario SSH]
Por ejemplo en mi caso:
host server1 hostName ubserver1 user jota host server2 hostname ubserver2 user jota
En host
podemos darle el nombre que queramos, pero hostname
debe ser el nombre de host real para la máquina. Tendremos que indicarlo además en el fichero /etc/hosts
, al que añadiremos:
192.168.2.130 ubserver1 192.168.2.131 ubserver2
De esta manera para conectar con los hosts remotos sólo tendriamos que introducir:
cssh server1 server2
Organización completa de un verdadero clúster SSH en ~/.csshrc
Y ya llegados a este punto vamos a dar un paso más en la organización de nuestras conexiones SSH para conformar un clúster como tal. Para ello editamos el fichero ~/.csshrc
, el cual deberá tener la siguiente sintaxis:
clusters = nombre_primer_clúster nombre_segundo_clúster... nombre_n_cluster nombre_primer_clúster = máquinas del primer clúster nombre_segundo_cluster = máquinas del segundo clúster …
Donde:
- clusters: el nombre de cada cluster de máquinas SSH
- nombre_n_cluster: nombre del cluster seguido por un igual del conjunto de máquinas que conforman ese cluster.
En mi ejemplo quedaría tal que:
clusters = cluster1 cluster1 = server1 server2
Evidentemente tendremos que tener definidos los miembros del clúster en ~/.ssh/config. Ahora para conectar con nuestro clúster de máquinas basta con hacer:
cssh cluster1
Todo mucho más sencillo. Y esto es especialmente útil ya que podemos tener dividos los grupos de servidores según distintas funcionalidades, por ejemplo:
clusters = seguridad cuentas recursoshumanos seguridad = server1 server2 cuentas = server3 server4 server5 recursoshumanos = server6 server7
Como véis, fácil y con condimento.