Jak mogę przechowywać lokalny, opatrzony znacznikiem czasu rejestr wszystkich zdalnych poleceń, z których korzystam ssh
(uruchomiono klienta openssh z wiersza poleceń bash
)?
Wymagania:
Kluczowy:
- 100% po stronie klienta, bez polegania na logowaniu na serwerze
- Skonfigurowany lub zainstalowany na użytkownika z dziennikami przechowywanymi w katalogu osobistym użytkownika.
- Obsługa rozróżniania wielu sesji jednocześnie z różnymi użytkownikami i hostami.
- Nieinwazyjne (nie trzeba go aktywować za każdym razem i nie koliduje znacząco z używaniem ssh)
Wysoki priorytet:
- Każde wyjście nie jest rejestrowane ani filtrowane w jak największym stopniu
- Wpisy hasła nie są rejestrowane lub plik jest szyfrowany
- Wskazuje używane polecenia (po przetworzeniu tabulacji / historii, spacje, CTRL+ Citd.)
Miło jest mieć:
- Rejestruje również polecenia w połączonych sesjach (polecenia wprowadzone podczas sesji zdalnej
ssh
lubsu <user>
sesji) - Początek i koniec sesji powinny być rejestrowane
- Prosty
bash
-na, rozwiązanie niż root byłoby najlepsze (być możealias
lubbash
wrapper script dossh
polecenia?)
- Rejestruje również polecenia w połączonych sesjach (polecenia wprowadzone podczas sesji zdalnej
Mój poziom umiejętności:
- Nie jestem nowy w programowaniu, ale nadal uczę się
bash
i „Linux”, więc próbki kodu z krótkimi objaśnieniami byłyby bardzo mile widziane.
Możliwe strategie
- keylogger - Problem: rejestruje hasła, nie rejestruje zakończenia karty / historii (patrz odpowiedź Glenna )
screen
ze zrzutem przewijania raz na sekundę idiff
między nimi, aby znaleźć nowe linie przewijania - Problem: jak można to zaimplementować w przydatny zautomatyzowany sposób?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Problem: nie można obsłużyć wieloliniowych poleceń ani historii w połączonych sesjach, konieczne jest staranne czyszczenie (patrz moja odpowiedź)- Połączenie niektórych z powyższych
Przykład
Następująca sesja SSH:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
Może to prowadzić do dziennika ~/logs/ssh.log
takiego jak:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
Lub być może zostanie utworzony osobny dziennik dla każdej sesji z wierszem poleceń używanym do rozpoczęcia sesji na górze pliku.