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.

martes, 7 de mayo de 2013

Caminata a la cascada

Por suerte a mi vecino (tambíen llamado Gabriel) también le gusta salir a caminar por la montaña, así que el sábado pasado nos fuimos a dar una vuelta por los Altos del Chapelco, donde yo ya estuve caminando y relevando calles para OpenStreetMap.


Cuando llegamos a un puentecito me dice que le habían comentado que siguiendo uno de los caminos se llegaba a una cascada, así que fuimos por ese lado. Al rato encontramos a una pareja paseando el perro y nos dijeron que sí, que era por ahí, pero que íbamos a llegar un poco justos con la luz del sol. Así que le metimos pata.


En total son unos 5km desde casa por calles y caminos (se puede llegar en auto) y después unos 600 metros más siguiendo el cauce de un arroyo seco (supongo que en primavera debe tener caudal) hasta llegar a la cascada.

El agua helada y riquísima.

Los últimos 150 metros son bastante empinados, o eso me pareció por la falta de estado... llegué casi sin aire en los pulmones, así que mejor que me ponga a hacer algo de ejercicio.


Llegamos a la cascada, el lugar más alto a menos que quieras escalar una pared de roca, y la vista desde ahí es muy linda, incluso se llega a ver el lago Lolog. Justo estaba atardeciendo así que todo tenía un color anaranjado especial.

Prueba que la subida era empinada, aparte de no estar en buen estado.
De paso aproveche la salida para probar el nuevo chiche montañero que me compré, funciona muy bien y es una pavada manejarlo. Lástima que confié en pilas chinas baratas bajo la promesa de tener más mAh que las de marca, y me duraron menos de dos horas cuando se supone que tienen que durar 24hs. Voy a tener que recargarlas a pleno y volver a probar... sino quedarán para los juguetes de los chicos.

Con un poco de ganas, arriba a la izquierda se puede ver el Lolog.

Quedó guardado el waypoint para volver en primavera o verano. Si el arroyo tiene agua va a ser un lugar muy lindo para hacer un picnic y chapotear un rato.

Al rato de llegar se puso el Sol, así que tuvimos que bajar rápido.

martes, 8 de enero de 2013

Prompt para desarrolladores multi SCM

Para los que manejan varios SCMs a la vez, ya sea por gusto o por necesidad, va un tip para definir el tipo de SCM del directorio actual, y si hay archivos sin comitear (mostrando un * en el prompt).
En el caso de git, también muesta el branch en el que estás trabajando.

Ponelo en el ~/.bashrc o cualquier otro archivo que se importe al iniciar la sesión de bash:

-----------------------------------------------
PS1='\[\033[01;32m\]\h\[\033[00m\] \[\033[01;34m\]\W\[\033[01;33m\]$(get_repo_info)\[\033[00m\]\$ '

function get_repo_info {
    INFO=""
    DIRTY=""

    for i in svn:info bzr:info hg:summary
    do
        TYPE=`echo $i | cut -f1 -d':'`
        COMMAND=`echo $i | cut -f2 -d':'`
        if [ "$INFO" == "" ] && [ `$TYPE $COMMAND 2>/dev/null | wc -l` -gt 0 ]
        then
            [ `$TYPE status 2> /dev/null | grep -v '?' | wc -l` -gt 0 ] && DIRTY='*'
            INFO="⚡$TYPE$DIRTY"
        fi
    done

    if [ "$INFO" == "" ] && [ `git branch 2>/dev/null | wc -l` -gt 0 ]
    then
        BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/"`
        [ `git status --porcelain 2> /dev/null | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡git:$BRANCH$DIRTY"
    fi

    echo $INFO
}
-----------------------------------------------

Y si querés verlo antes de probarlo, una captura: