Зачем мониторить 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.