miércoles, 17 de febrero de 2016

Usar samba para enviar ficheros desde un script.

Un buen administrador de sistemas tiene siempre un montón de soldaditos trabajando para él por toda la red: scripts, tareas puppet, procesos de vigilancia,... A veces nos interesa que nos manden información de vuelta para que otro proceso o nosotros mismos la recopilemos y que esa información nos llegue de una manera sencilla.

En este caso concreto tenía unos scripts que recaban información y necesitaba que me suministrasen un fichero por cada máquina donde se ejecutaban. Para ello se me ocurrieron varias alternativas:

  • Que me lo enviasen por correo: instalando y configurando en cada PC un cliente de correo tipo mutt. Demasiado complicado.
  • Que se guarde en algún servidor conectando por FTP, SCP, ... Me obliga a habilitar ese servicio en el servidor y buscar la manera de que se pueda guardar el fichero de manera no interactiva sin tener que poner contraseña .
  • Hacer facters de puppet y dejar que el propio puppet recopile los datos y los guarde en el servidor en ficheros yaml con sus reports. Si es para algo que va a usarse mucho es una buena solución. Si es para algo rápido e infrecuente no merece la pena trabajarse el facter en Ruby.
  • La elegida: escribir el fichero en un recurso Samba de acceso público, sin autenticación. Rápido y sucio, que solo requiere tener instalado smbclient en los PC donde se realiza.

En primer lugar la carpeta compartida de forma promiscua:

# cat /etc/samba/smb.conf
....
map to guest = Bad User
....
[almacen]
comment = Almacen IES
path = /home/almacen
writable = yes
browseable = yes
guest ok = yes
force directory mode = 0777
....

En esta carpeta cualquiera puede leer y escribir sin ningún tipo de autenticación, ideal para scripts que se ejecutan de forma autónoma por toda la red. Ahora vamos a ver un ejemplo de script, que guardará los datos (por ejemplo, nombre del PC y MAC de sus tarjetas de red) en la ruta /home/almacen/deposito y en un fichero con el mismo nombre que el PC:

#!/bin/bash

HOST=$(hostname)

echo  "$HOST" > /tmp/$HOST

ifconfig -a | grep HW | awk '{print $5}' >>/tmp/$HOST

cd /tmp
smbclient -N //172.19.196.14/almacen -c "cd deposito; put $HOST"

exit 0

La clave está en:

smbclient -N //172.19.196.14/almacen -c "cd deposito; put $HOST"

Que conecta a al servidor situado en esa IP y al recurso "almacen" y ejecuta los comandos cd y put para subir el fichero al directorio indicado. Simple, efectivo, rápido y sucio. Lo tiene todo.

No hay comentarios:

Publicar un comentario