Registrando actividad de shell (script) *remotamente*

script es un comandito de UNIX muy útil: permite registrar toda la actividad de la consola (incluyendo salidas de comandos) en una bitácora.

Hasta ahí, nada raro; el problema es que a veces uno quisiera que esta bitácora se registrara fuera del sistema en cuestión, por cuestiones de integridad (modificar en lo más mínimo el sistema en cuestión) o comodidad (centralizar las bitácoras de actividad de un sysadmin de múltiples sistemas, por ejemplo). script exige un archivo local para escritura. Sin embargo, le podemos dar la vuelta… con pipes nombrados (FIFO):


mkfifo /ruta/al/pipe
cat /ruta/al/pipe | nc 192.0.2.1 1111 &
script -f /ruta/al/pipe

Un netcat en el equipo remoto (o un webservice, o lo que sea que reciba nuestra bitácora) y listo!

Mostrar todos los usuarios con shell y cuenta activa

awk -F ":" '$0 ~ /bash$/ {print $1}' /etc/passwd | xargs -L 1 -I {} grep {} /etc/shadow | awk -F ":" '$2 !~ /^!/ {print $1}'

– Requiere privilegios de root, obviamente.

– Sustituir “bash” por la terminal de su preferencia (o sh$ si quieren ver *todas* las terminales…)

– No he encontrado como optimizar la segunda parte a un solo comando awk, debido a que no encuentro como introducir el resultado de xargs a variable en awk. Si alguien lo puede hacer es bien recibida la mejora 🙂