To, co chcę osiągnąć, to móc automatycznie rejestrować sesje terminali w plikach za każdym razem, gdy korzystam z Yakuake / Konsole.
Łatwo to osiągnąć, jeśli na początku mojej sesji:
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
Ale chcę uruchomić powyższe automatycznie przy każdym uruchomieniu Yakuake lub otwarciu nowej karty.
Korzystanie z .bashrc nie działa, ponieważ tworzy nieskończoną pętlę, ponieważ „skrypt” otwiera nową sesję, która z kolei odczytuje .bashrc i uruchamia kolejny „skrypt” i tak dalej.
Przypuszczalnie więc muszę jakoś napisać skrypt do Yakuake / Konsole, aby uruchomić skrypt „raz” po otwarciu nowej karty. Pytanie brzmi jak?
exec
na początku linii. powinien zacząć odscript -f
tego samego PID-u powłoki.Odpowiedzi:
Jeśli ktoś chce automatycznie nagrywać sesje terminali - w tym sesje SSH (!) - za pomocą
script
narzędzia, oto jak to zrobić.Dodaj następujący wiersz na końcu
.bashrc
w swoim katalogu domowym lub w inny sposób,/etc/bash.bashrc
jeśli chcesz nagrywać tylko sesje wszystkich użytkowników. Testujemy, czy proces macierzysty powłoki nie jest,script
a następnie uruchamiamyscript
.W systemie Linux:
W przypadku BSD i macOS zmień
script -f
nascript -F
:To wszystko!
Teraz, gdy otworzysz nowy terminal, zobaczysz:
script
zapisze twoje sesje do pliku w twoim katalogu domowym, nazywając je30-Nov-11_00-11-12_shell.log
w rezultacie czymś takim .Więcej personalizacji:
script -a /path/to/single_log_file
script -f
(Linux) lubscript -F
(BSD i macOS)Ta odpowiedź zakłada
script
oczywiście , że zainstalowałeś. W przypadku dystrybucji opartych na Debianiescript
jest częściąbsdutils
pakietu.źródło
edit
przycisk, który pojawia się tuż pod nim.${RANDOM}
i / lub$$
do nazwy pliku, ponieważ uruchomienie dwóch powłok w ciągu jednej sekundy spowoduje kolizję nazwy pliku. Osobiście często używam,script.$(date -u +%Y%m%dt%H%M%S).${HOSTNAME:-$(hostname)}.$$.${RANDOM}.log
aby upewnić się, że pliki są automatycznie sortowane według daty / godziny i są spójne w całej TZ, znam hosta, który je zainicjował, znam proces własności i nie ma kolizji nazw. Rzadko używam,${USER}
ponieważ zazwyczaj jest to coś tylko dla mnie.Chociaż pytanie to zostało zadane przez osobę chcącą nagrać własne sesje, alternatywnym przypadkiem użycia może być administrator systemu, który chce śledzić, co robią różni użytkownicy.
Alternatywne podejście
W tym przewodniku z 2008 r. ( Zarchiwizowanym ) zastosowano inną metodę wymuszenia
script
uruchomienia, gdy użytkownik loguje się przy użyciu ssh, co wymaga od użytkowników zalogowania się przy użyciu klucza publicznego / prywatnego.Odbywa się to poprzez dodanie skryptu do
.ssh/authorized_keys
pliku użytkownika przed kluczem:log-session
( Archiwum ) skrypt następnie decyduje, czy nie uruchomić/usr/bin/script
się zalogować sesji tego użytkownika.Aby uniemożliwić użytkownikowi usunięcie dodanego polecenia, administrator będzie musiał przejąć własność
authorized_keys
pliku użytkownika .Niestety oznacza to, że użytkownik nie będzie mógł dodawać żadnych dodatkowych kluczy ani, co ważniejsze, odwołać istniejącego klucza, jeśli zostanie naruszony, co jest dalekie od ideału.
Ostrzeżenia
Domyślną konfiguracją sshd jest to, że pozwala użytkownikom na wykonywanie SFTP podczas logowania ssh. Umożliwia to użytkownikom edycję plików bez rejestrowania zmian. Jeśli administrator nie chce, aby użytkownicy mogli to zrobić, powinien włączyć rejestrowanie SFTP lub wyłączyć usługę. Chociaż nawet wtedy użytkownicy nadal mogą dokonywać niewidocznych zmian w plikach, uruchamiając coś takiego w swoim terminalu:
Możliwe może być monitorowanie takich zmian za pomocą systemu plików kopiowania przy zapisie, który rejestruje całą historię plików.
Ale podobna sztuczka pozwoliłaby użytkownikowi na wykonywanie poleceń bez ich logowania:
Nie znam na to łatwych rozwiązań. Możliwościami mogą być:
To może być możliwe w przypadku audytu .
Ale w każdym razie...
źródło
Zamiast:
Użyłbym:
W tym przypadku podwójne cudzysłowy nie są konieczne, ale i tak używam ich jako standardowej praktyki. Zdecydowanie polecam użycie przełącznika „x” zarówno dla grep, jak i pgrep, aby uniknąć rzadkiego, ale problematycznego dopasowania do podciągów.
źródło