Para este tipo de notificaciones utilizaba hasta hace no mucho el correo pero desde que integré las notificaciones de Grafana en Slack he ido añadiendo más servicios a la plataforma.
Como ya hemos visto para el caso de Grafana cómo crear una app en Slack pasamos en este caso directamente a crear un nuevo canal en mi workspace llamado #ssh-logins
Después desde mi app original creo un nuevo webhook que me permitirá mediante una URL endpoint para publicar mensajes en dicho canal:
Con un sencillo script en Python ya puedo enviar mensajes al canal #ssh-logins
#!/usr/bin/env python3 import requests import json import os webhook_url = "MYWEBHOOK" rhost = os.environ['PAM_RHOST'] service = os.environ['PAM_SERVICE'] tty = os.environ['PAM_TTY'] user = os.environ['PAM_USER'] host = os.uname().nodename message = """\ -------------------- SSH Login Notification - Server: %s - User: %s - Remote Host: %s - Service: %s - TTY: %s ------------------- """ % (host,user,rhost,service,tty) if (os.environ['PAM_TYPE'] == 'open_session'): requests.post(webhook_url, headers={'Content-Type': 'application/json'}, json={"text": message})
Tendremos que sustituir el valor de la variable webhook_url
por nuestra URL de Webhooks propia.
Para integrarlo cada vez que inicie una nueva sesión SSH en nuestro servidor tenemos que modificar la configuración de /etc/pam.d/sshd
añadiendo al final:
session optional pam_exec.so /bin/ssh-login-notify.py
Lo ponemos como opcional para no bloquear el acceso en caso de que no pueda ejecutarse correctamente el script de notificación.
Hacemos login por SSH y deberíamos recibir la siguiente notificación en Slack: