Aller au contenu

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 }}"