Uruchom skrypt (systemowy) podczas logowania i / lub wylogowywania SSH
12
Chciałbym, aby mój serwer OpenSSH uruchamiał skrypt za każdym razem, gdy użytkownik loguje się za pomocą SSH, najlepiej przekazując nazwę hosta lub adres IP, a także nazwę użytkownika. Dodatkowo chciałbym, aby uruchamiał skrypt za każdym razem, gdy sesja zostanie zakończona (przekazanie nazwy użytkownika). Te skrypty nie powinny być uruchamiane w sesji użytkownika, ale w całym systemie.
Chodzi o to, aby dać dźwiękowe ostrzeżenie przy logowaniu i wylogowaniu, np. Za pomocą espeaki wyświetlić informacje na zewnętrznym wyświetlaczu.
Widziałem, że istnieje pam-scriptspakiet, ale nie jestem pewien, czy to robi to, co chcę, ani jak go używać.
Możesz wymusić polecenie dla użytkowników SSH zamiast tego, którego żądają (lub powłoki, jeśli nie wydadzą określonego polecenia). Można to zrobić poprzez określenie tego polecenia z czymś ForceCommand /root/ssh-wrapperw /etc/ssh/sshd_config(nie ma znaczenia, gdzie znajduje się skrypt, lub jak to nazywa, po prostu upewnij się, że jest wykonywalny przez wszystkich użytkowników i punktów plików konfiguracja sshd do niego). Musisz także ponownie uruchomić / ponownie załadować sshd. Oryginalny komenda jest dostępna dla wymuszonym polecenia jako $SSH_ORIGINAL_COMMAND.
Właśnie zhakowałem ten skrypt razem:
#! /bin/sh# add logger options when needed
log="logger -t ssh-wrapper"# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
$log $USER login from $ip
espeak "$USER just logged in from $ip">/dev/null 2>&1
$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}
$log $USER logout
espeak "$USER just logged out">/dev/null 2>&1
Teraz za każdym razem, gdy się loguję lub wylogowuję, głos mówi mi o tym, a wpis dziennika jest zapisywany w syslog. Rejestruje także polecenie. Możesz użyć czegoś takiego jak poniżej, aby „śledzić” użycie sshd:
tailf /var/log/syslog | grep ssh-wrapper
Pamiętaj, że ten skrypt jest w większości nieprzetestowany, więc używaj go na własne ryzyko! ;-)
PS: pamiętaj, że ten skrypt jest uruchamiany jako zalogowany użytkownik, więc nie możesz zrobić wszystkiego, co chcesz, jeśli zmienisz go, aby dodać więcej funkcji ...
Cześć, Czy jest jakiś sposób na wykrycie sytuacji, gdy użytkownik właśnie zamknął okno za pomocą klienta ssh. Twój skrypt nie rozwiązuje tej sytuacji. Dzięki.
Dmitry Eskin
Należy shellw $ {SSH_ORIGINAL_COMMENT: -shell} zastąpić rzeczywistą ścieżką do powłoki, np. / bin / bash? Kiedy próbuję to uruchomić, narzeka, że nie ma takiego polecenia jak shell. Właściwie to chyba miałeś na myśli SHELL? To powinno uruchomić powłokę określoną przez użytkownika.
Ibrahim
1
Wcześniej widziałem to pasujące zdarzenia w pliku dziennika (co zapewniłoby ci elastyczność w dopasowywaniu czegokolwiek). Ta strona jest źle sformatowana, ale może pomóc w rozpoczęciu korzystania:
https://help.ubuntu.com/community/AudibleLogs#Play with esound
Myślę, że ty / oni mają na myśli espeakzamiast esound?
JanC
0
(Odpowiedź wysłana z tego samego pytania na ServerFault )
Po prostu napisz skrypt, aby zrobić, co chcesz, a następnie wklej go /etc/profilelub ewentualnie w /etc/bash.bashrczależności od potrzeb. Zmiany tych plików będą miały zastosowanie do wszystkich użytkowników. Jednak nie jestem pewien, jak byś poszedł w kwestii powiadamiania przy wylogowaniu przy takim podejściu.
Alternatywnie, innym sposobem na to byłoby posiadanie prostego monitorowania demona /var/log/authdla nowych (i zamykających) sesji ssh. W ten sposób będzie mógł wysyłać powiadomienia zarówno przy logowaniu, jak i wylogowaniu.
# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh
Nie ma potrzeby restartowania żadnej usługi. Należy pamiętać, że ten skrypt będzie również uruchamiany, gdy użytkownik zaloguje się z terminala zamiast SSH.
Uwaga 1: Możesz espeakprzesyłać strumieniowo do dowolnego innego procesu, który odpowiada Twoim potrzebom (e-mail, powiadomienia push itd.). Jeśli używasz, writea użytkownik jest zalogowany, zobaczy on komunikaty wyjściowe bezpośrednio na swoim terminalu.
shell
w $ {SSH_ORIGINAL_COMMENT: -shell} zastąpić rzeczywistą ścieżką do powłoki, np. / bin / bash? Kiedy próbuję to uruchomić, narzeka, że nie ma takiego polecenia jak shell. Właściwie to chyba miałeś na myśli SHELL? To powinno uruchomić powłokę określoną przez użytkownika.Wcześniej widziałem to pasujące zdarzenia w pliku dziennika (co zapewniłoby ci elastyczność w dopasowywaniu czegokolwiek). Ta strona jest źle sformatowana, ale może pomóc w rozpoczęciu korzystania: https://help.ubuntu.com/community/AudibleLogs#Play with esound
źródło
espeak
zamiastesound
?(Odpowiedź wysłana z tego samego pytania na ServerFault )
Po prostu napisz skrypt, aby zrobić, co chcesz, a następnie wklej go
/etc/profile
lub ewentualnie w/etc/bash.bashrc
zależności od potrzeb. Zmiany tych plików będą miały zastosowanie do wszystkich użytkowników. Jednak nie jestem pewien, jak byś poszedł w kwestii powiadamiania przy wylogowaniu przy takim podejściu.Alternatywnie, innym sposobem na to byłoby posiadanie prostego monitorowania demona
/var/log/auth
dla nowych (i zamykających) sesji ssh. W ten sposób będzie mógł wysyłać powiadomienia zarówno przy logowaniu, jak i wylogowaniu.źródło
Możesz użyć sshrc (man sshd, wyszukaj sshrc)
ssh wykona / etc / ssh / sshrc, jeśli istnieje i możesz uruchomić jeden skrypt (lub wywołać wiele skryptów)
możesz wywołać dowolną zmienną bash, jak
$USER
lub uzyskać adres IP przezmożesz napisać skrypt, aby przetestować lub zalogować, co tylko chcesz.
Skrypt wylogowania ... cóż, właśnie tego szukam! :RE
źródło
Myślę, że PAM jest najlepszą opcją. Jest to system i nie można go zastąpić plikami konfiguracyjnymi użytkownika.
Możesz wykonać następujące kroki. Pracowali dla mnie na Ubuntu 14.04.4 LTS.
Biegać:
Edytuj ten pusty plik i dodaj następujące wiersze:
Następnie udziel uprawnienia do wykonywania skryptu:
Teraz uruchom:
Dodaj następujące wiersze na końcu pliku:
Nie ma potrzeby restartowania żadnej usługi. Należy pamiętać, że ten skrypt będzie również uruchamiany, gdy użytkownik zaloguje się z terminala zamiast SSH.
Uwaga 1: Możesz
espeak
przesyłać strumieniowo do dowolnego innego procesu, który odpowiada Twoim potrzebom (e-mail, powiadomienia push itd.). Jeśli używasz,write
a użytkownik jest zalogowany, zobaczy on komunikaty wyjściowe bezpośrednio na swoim terminalu.Odnośniki:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on -login użytkownika/
Powiązane:
Jak skonfigurować powiadomienie e-mail, gdy logowanie do ssh zakończy się pomyślnie?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / email-powiadomienie-o-każdym-ssh-połączenie-z-serwerem linux
źródło