Within a second
Streams journald or tails auth.log through rotations. The moment sshd writes the line, the notification is on its way.
SSH daemon · Rust · Discord & Slack
Gabier watches the SSH logins on your VPS and pings you on Discord or Slack within a second. One Rust binary, zero dependencies — and a throttle that keeps a port-22 scan out of your channel.
A clean embed you can read from your phone: who, from where, how. Get yourself pinged on accepted logins, and let a thousand refused attempts collapse into a single line.
Someone is boarding
SSH login accepted on vps-dedie-01.
Gabier does one thing and does it well. No heavy agent, no dashboard to host.
Streams journald or tails auth.log through rotations. The moment sshd writes the line, the notification is on its way.
Per-IP burst limits fold a thousand refused attempts into one summary — so the single login that succeeded is still the thing you see.
A dedicated account with no shell, a read-only system, no capabilities, a 64 MB ceiling and a syscall filter. It reads logs and posts HTTPS.
A plain webhook, no bot to invite. Both at once if you like: if one is down, the other still gets through.
Rust and rustls, no OpenSSL, no runtime. Debian, Ubuntu, Fedora, Arch, Alma: anywhere sshd runs.
MIT licensed. Read it, audit it, fork it — the parser is covered by tests against a real auth.log.
The one hard part
A VPS with port 22 open takes thousands of attempts a day. Notify all of them and the channel is unreadable, which means you miss the one that matters. Gabier sends the first failures from an IP, then counts the rest and posts one summary per window. Successful logins are never grouped.
🚨 Rafale de tentatives SSH
43 tentatives refusées depuis 185.243.96.107.
Comptes visés admin, oracle, postgres, test, ubuntu 01 · Watch
journalctl --follow
Gabier follows the sshd journal, a log file through its rotations, or stdin for a dry run.
02 · Recognize
Accepted publickey for…
sshd lines are parsed into events: user, IP, port, method, key fingerprint.
03 · Decide
burst 1 / 300s
Filters, deduplication, and the per-IP throttle that keeps a scan out of your channel.
04 · Shout
POST webhook
A message lands in Discord or Slack, with retries. Pince did his job; back to what you were doing.
Build it, run the installer, paste one webhook. The script creates the service account, installs the hardened unit and enables it at boot.
$ git clone https://github.com/Flottille/gabier
$ cd gabier && cargo build --release
$ sudo ./install.sh # account, binary, unit, config
$ sudo nano /etc/gabier/config.toml # paste your webhook
$ sudo -u gabier gabier check # validates and reaches the webhook
$ sudo systemctl start gabier