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:



