SSH-Notify envoie une notification Discord à chaque connexion SSH interactive (shell) sur votre serveur — plus de spam lors des transferts SFTP/SCP/rsync.
- ✅ Hook PAM
open_session(fiable, idempotent) - ⚙️ Installateur / désinstalleur (avec options)
- 🧩
.envpour toute la configuration - 🧾 Log CSV + logrotate
- 📅 Rapport hebdomadaire (systemd timer + e-mail optionnel)
- 🌐 GeoIP configurable (ipapi/ipinfo/none)
- 💤 Heures muettes + anti-doublon
- 🛡️ Politique LAN (label/mute/notify)
- Passage d’un script dans
/etc/profile.d→ à un hook PAM (pas de doublons, plus robuste) - Filtrage strict des transferts : SFTP / SCP / rsync ignorés
- Installation simplifiée :
ssh-notify-install.shcopie les binaires, ajoute le hook PAM, installe le timer et le logrotate, crée.env - .env centralise le webhook, les heures muettes, la politique LAN, etc.
- Rapport hebdo via Discord et/ou e-mail (bientôt)
- Logs en CSV + rotation automatique
Sous Debian/Ubuntu :
sudo apt update
sudo apt install -y curl jq mailutils git- Cloner le projet :
git clone https://github.com/T-TutoRapide/notify-ssh-login
cd notify-ssh-login- Lancer l’install (vous pouvez fournir le webhook en CLI ou le saisir au prompt) :
# mode interactif (posera la question si WEBHOOK vide)
sudo bash ./ssh-notify-install.sh
# ou silencieux avec webhook fourni
sudo bash ./ssh-notify-install.sh -y --webhook "https://discord.com/api/webhooks/ID/TOKEN"Ce que fait l’installateur :
-
Copie
files/ssh-notify.shetfiles/ssh-notify-report.sh→/usr/local/bin/ -
Ajoute le hook PAM dans
/etc/pam.d/sshd:session optional pam_exec.so seteuid /usr/local/bin/ssh-notify.sh -
Crée
/etc/ssh-notify/.envdepuis.env.example -
Installe
ssh-notify-weekly.service+ssh-notify-weekly.timer(rapport chaque dimanche 06:00) -
Installe
/etc/logrotate.d/ssh-notify
Les clés importantes :
WEBHOOK="" # URL Discord
QUIET_HOURS="23-6" # heures muettes (vide = désactivé)
LOCAL_POLICY="label" # label | mute | notify (comportement en LAN)
GEOIP_METHOD="ipapi" # ipapi | ipinfo | none
EXCLUDE_USERS="backup www-data"
ONLY_ROOT=false
LOG_FILE="/var/log/ssh-notify.log"
DEBUG_LOG="/var/log/ssh-notify.debug.log"
DEBUG=false # true pour diagnostiquer, puis remettre false
# E-mail hebdo (optionnel)
MAIL_TO=""
MAIL_FROM="ssh-notify@$(hostname -f)"
MAIL_SUBJECT="[SSH-Notify] Rapport hebdomadaire"-
LOCAL_POLICY
label: notifie et indique “LAN (privé)”mute: ne pas envoyer sur Discord en LAN (log CSV conservé)notify: notifie comme une IP publique
-
QUIET_HOURS : plage d’heures à ne pas notifier (ex.
23-6).
# Simuler une connexion interactive (doit notifier)
PAM_TYPE=open_session PAM_USER=$USER PAM_RHOST=8.8.8.8 SSH_TTY=/dev/pts/1 /usr/local/bin/ssh-notify.sh
# Simuler un transfert (NE DOIT PAS notifier)
PAM_TYPE=open_session PAM_USER=$USER PAM_RHOST=8.8.8.8 SSH_ORIGINAL_COMMAND='scp -t /tmp' /usr/local/bin/ssh-notify.shVérifier les journaux :
tail -n 50 /var/log/ssh-notify.log
tail -n 50 /var/log/ssh-notify.debug.logUn timer systemd lance /usr/local/bin/ssh-notify-report.sh chaque dimanche 06:00 :
- Résumé envoyé sur Discord (si
WEBHOOKest défini) - Envoi e-mail si
MAIL_TOest renseigné etmailutilsinstallé
Gérer le timer :
systemctl status ssh-notify-weekly.timer
systemctl list-timers | grep ssh-notifyInstallé automatiquement dans /etc/logrotate.d/ssh-notify pour :
/var/log/ssh-notify.log/var/log/ssh-notify.debug.log
Rotation hebdomadaire, 12 archives, compression activée.
Tester une rotation :
sudo logrotate -v -f /etc/logrotate.d/ssh-notify# supprime scripts, .env, PAM, systemd, logrotate
sudo bash ./ssh-notify-install.sh --remove
# variantes
sudo bash ./ssh-notify-install.sh --remove --keep-log
sudo bash ./ssh-notify-install.sh --remove --purge-packages # (Debian/Ubuntu) supprime curl jq mailutils-
Activer le debug :
sudo sed -i 's/^DEBUG=.*/DEBUG=true/' /etc/ssh-notify/.envPuis regarder :
/var/log/ssh-notify.debug.log -
Vérifier le hook PAM :
tail -n +1 /etc/pam.d/sshd | grep -n 'ssh-notify.sh'
-
Purger l’anti-doublon (si tests rapprochés) :
sudo rm -f /run/ssh-notify/* -
Heures muettes actives ? Mettre
QUIET_HOURS=""pour tester.
Fait avec 💖 par TutoRapide

