"Después del juego es antes del juego"
Sepp Herberger

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