#!/bin/bash ################ ### LOG MAIL ### ################ env > /tmp/env_login.txt USERIP=$(echo ${SSH_CONNECTION%% *}) # On ne check la géo que si l'IP n'est pas locale (RFC1918) if [[ $USERIP =~ ^192\.168\. || $USERIP =~ ^10\. || $USERIP =~ ^172\. ]]; then LOC_INFO="Local Network (LAN)" else # On récupère tout en un seul appel JSON pour économiser l'API et éviter les erreurs GEO=$(curl -s ipinfo.io/$USERIP/json) CITY=$(echo "$GEO" | grep '"city"' | cut -d'"' -f4) COUNTRY=$(echo "$GEO" | grep '"country"' | cut -d'"' -f4) ORG=$(echo "$GEO" | grep '"org"' | cut -d'"' -f4) LOC_INFO="$CITY, $COUNTRY (ISP: $ORG)" fi # Détection du backend mail (une seule fois) if command -v mail >/dev/null 2>&1; then MAIL_BACKEND="mail" elif command -v sendmail >/dev/null 2>&1; then MAIL_BACKEND="sendmail" elif command -v msmtp >/dev/null 2>&1; then MAIL_BACKEND="msmtp" else echo "ERROR: No mail system available" >&2 MAIL_BACKEND="none" fi send_mail() { local to="$1" local subject="$2" local body="$3" case "$MAIL_BACKEND" in mail) echo "$body" | mail -v -s "$subject" "$to" ;; sendmail) { echo "To: $to" echo "Subject: $subject" echo "" echo "$body" } | sendmail -t ;; msmtp) { echo "To: $to" echo "Subject: $subject" echo "" echo "$body" } | msmtp "$to" ;; *) echo "No mail backend available" >&2 return 1 ;; esac } SUBJECT="[INFO] $USER connected on $FULLNAME" BODY="$USER connected on $FULLNAME from $USERIP - $LOC_INFO" send_mail "$ADMIN_MAIL" "$SUBJECT" "$BODY"