Dostałem dziś od znajomego zapytanie o najprostszy sposób na wysłanie powiadomienia na adres e-mail o logowaniu się do serwera za pośrednictwem konsoli.
Może komuś się przyda, więc…
Spis treści w artykule [rozwiń]
E-mail o (za)logowaniu się użytkownika do serwera (SSH)
Podejrzewam, że większość z Was ma przynajmniej 2 użytkowników: „root” i jakiś inny, własny.
Zakładam też, że macie na swoim serwerze skonfigurowane wysyłanie poczty e-mail (własny serwer pocztowy, lub np. MSMTP).
Użytkownik „root”
Pewnie jest duża szansa, że niektórzy z Was mają zablokowane zdalne logowanie jako „root” – więc mogłoby się wydawać że, nie ma potrzeby ustawiać powiadomienia dla tego użytkownika, ale:
- Zawsze możecie kiedyś włączyć, więc lepiej przyszłościowo…
- Może jednak macie włączone zdalne logowanie jako „root”
- Zostaje jeszcze konsola dostępna z panelu zarządzania serwerem (VPS), za pośrednictwem której „root” może się „zdalnie” (no, prawie zdalnie) zalogować
Konfiguracja
Edytujemy plik:
sudo nano /root/.bashrc
I gdzieś na końcu dodajemy:
# E-mail po zalogowaniu
echo `hostname` `date` `who | grep "root"` | mail -s "Root login `hostname`" docelowy_adres_email@serwerpocztowy.pl
Lub w przypadku gdy nie korzystacie (lub nie macie zainstalowanego w systemie) polecenia „mail”, bezpośrednio wywołanie aplikacji MSMTP:
TEMAT="Root login "$(hostname)
TRESC=$(echo `hostname` `date` `who | grep "root"`)
echo -e "Subject: "$TEMAT"\r\n\r\n"$TRESC | msmtp --from=profil-domyślny -t docelowy_adres_email@serwerpocztowy.pl
Pozostali użytkownicy
Możemy też takie powiadomienie ustawić dla innych użytkowników, zmienia się tylko trochę ścieżka do pliku:
sudo nano /home/[NAZWA_UŻYTKOWNIKA]/.bashrc
Oraz komenda:
# E-mail po zalogowaniu
echo `hostname` `date` `who | grep "[NAZWA UŻYTKOWNIKA]"` | mail -s "[NAZWA UŻYTKOWNIKA] login `hostname`" docelowy_adres_email@serwerpocztowy.pl
Lub w przypadku gdy nie korzystacie (lub nie macie zainstalowanego w systemie) polecenia „mail”, bezpośrednio wywołanie aplikacji MSMTP:
TEMAT="[NAZWA_UŻYTKOWNIKA] login "$(hostname)
TRESC=$(echo `hostname` `date` `who | grep "root"`)
echo -e "Subject: "$TEMAT"\r\n\r\n"$TRESC | msmtp --from=profil-domyślny -t docelowy_adres_email@serwerpocztowy.pl
Przykładowy alert/e-mail
Od teraz po zalogowaniu się wybranego użytkownika powinniśmy otrzymać e-mail:
Temat: [NAZWA UŻYTKOWNIKA] login [NAZWA SERWERA]
[NAZWA SERWERA] wto, 15 kwi 2014, 10:33:36 CEST root pts/1 2014-04-15 10:33 [HOST/IP]
Pamiętajcie by zamiast „docelowy_adres_email@serwerpocztowy.pl” wpisać swój adres e-mail. I, że jest to relatywnie najprostsza wersja, można go jeszcze rozbudowywać. – ale to już raczej zbyteczne bajery… ;-)


- Wtyczka BackWPup w wersji 5.x to doskonały przykład, jak wylać dziecko z kąpielą i z relatywnie świetnego narzędzia zrobić właściwie bezwartościowego gniota - 1970-01-01
- Testowy przelew w Bitcoinach z najniższą prowizją, czyli krótka historia o tym, jak zamroziłem BTC na (ponad) rok - 1970-01-01
- Nowy system kopii zapasowych w Home Assistant 2025.1 to zapewne krok w dobrym kierunku, ale zdecydowanie przedwczesny - 1970-01-01