Notification de connexion
Objectif
Envoyer une notification lors d'une connexion en ssh sur mon serveur NAS.
Matériel utilisé
- 1 serveur NAS permettant la connexion distante par ssh
- 1 téléphone portable sur lequel est installée l'application mobile Home assistant pour recevoir la notification.
Mise en oeuvre
Lors d'une connexion ssh les commandes présentes dans le fichier /etc/ssh/sshrc sont exécutées. En ajoutant les lignes de commandes suivantes il est possible d'appeler un WEBHOOK au niveau de Home Assistant.
sshrc
#!/bin/bash
ip=$(echo "$SSH_CONNECTION" | cut -d " " -f 1)
hs=$(hostname)
hostIP="$(ip address show dev eth0 | grep "inet " | head --lines=1 | cut --delimiter=' ' --fields=6 | cut --delimiter='/' --fields=1)"
logger -t ssh-wrapper "$USER" login from "$ip"
curl --header "Content-Type: application/json" \
--request POST \
--data \
'{"topic": "'"$hs"'",
"host": "'"$hs"'",
"hostIP": "'"$hostIP"'",
"user": "'"$USER"'",
"from": "'"$ip"'",
"message": "'"$USER@$hs just logged in from $ip"'"}' \
http://localhost:8123/api/webhook/MY-SSH-WEBHOOK
La dernière ligne doit être adaptée avec l'adresse de votre instance Home Assistant. Dans mon cas, elle est située sur la même machine.
Traitement du WEBHOOK
A la réception du WEBHOOK, le sensor ssh_login prend la valeur du message envoyé (bob@nas just logged in from 192.168.1.2 par exemple).
Au changement de valeur du sensor ssh_login, le service de notification est appelé avec le message stocké sur le sensor.
automation:
- id: ssh_login_notify
alias: notify nas ssh login
trigger:
- platform: state
entity_id: sensor.ssh_login
action:
service: notify.mobile_app_pixel_2_xl
data:
message: '{{ states.sensor.ssh_login.state }}'
template:
- trigger:
- platform: webhook
webhook_id: MY-SSH-WEBHOOK
sensor:
- name: "ssh_login"
state: "{{ trigger.json.message }}"