SSH-алерты

Уведомления о SSH-входе на сервер.

Зашифрованный push на телефон при каждом подключении. Имя пользователя, IP, hostname — мгновенно.

Зачем мониторить SSH

Неожиданный SSH-логин — один из первых признаков компрометации сервера. Большинство админов узнают об этом из логов через часы. Nerve отправляет зашифрованный push в момент начала сессии.

Способ 1: хук profile.d (самый простой)

# /etc/profile.d/nerve-ssh-alert.sh
if [ -n "$SSH_CLIENT" ]; then
  IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
  echo "SSH login: $USER@$(hostname) from $IP" \
    | NERVE_DSN="nerve://TOKEN:[email protected]" nerve send &
fi

Способ 2: PAM-хук

# /etc/pam.d/sshd — добавьте в конец:
session optional pam_exec.so /usr/local/bin/nerve-ssh-notify.sh
# /usr/local/bin/nerve-ssh-notify.sh
#!/bin/bash
if [ "$PAM_TYPE" = "open_session" ]; then
  echo "SSH login: $PAM_USER@$(hostname) from $PAM_RHOST" \
    | NERVE_DSN="nerve://TOKEN:[email protected]" nerve send
fi

Способ 3: мониторинг auth.log

tail -F /var/log/auth.log \
  | grep --line-buffered "Accepted" \
  | while read -r line; do echo "$line" | nerve send; done

Алерт при неудачных попытках входа

tail -F /var/log/auth.log \
  | grep --line-buffered "Failed password" \
  | while read -r line; do echo "FAILED: $line" | nerve send --severity critical; done

Быстрый старт

go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "SSH login: root@prod-1 from 203.0.113.42" | nerve send

FAQ

Кого не алертить

Если deploy-пользователь подключается каждые несколько минут из CI, такой сигнал быстро станет шумом. Лучше фильтровать ожидаемых пользователей или отправлять их как standard, а root/login с неизвестного IP — как critical.

case "$PAM_USER" in
  deploy) SEVERITY="standard" ;;
  root) SEVERITY="critical" ;;
  *) SEVERITY="alert" ;;
esac

Что включить в SSH alert

Минимально полезный набор: user, hostname, remote IP, время и whether это интерактивная сессия. Не отправляйте приватные ключи, environment dump или содержимое командной строки.

Как получить уведомление о SSH-входе?

Добавьте скрипт nerve send в /etc/profile.d/ или используйте PAM-хук. Каждый SSH-логин вызовет push на телефон.

Это работает только для root?

Нет. Хук profile.d срабатывает для любого пользователя.

Данные зашифрованы?

Да. Username и IP шифруются до отправки на relay.