80 lines
1.8 KiB
Bash
Executable File
80 lines
1.8 KiB
Bash
Executable File
#!/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"
|