SSH-Sitzung unter Linux aufzeichnen und abspielen

Um eine Sitzung auf Ihrer Seite aufzuzeichnen, starten Sie vor dem Verbinden script --log-io session.log --log-timing session.tm und spielen sie mit scriptreplay ab. asciinema rec macht dasselbe in einer einzigen Datei, die sich leicht weitergeben lässt. Um jede Sitzung eines Benutzers auf dem Server aufzuzeichnen, egal mit welchem Client, richten Sie tlog ein. Aufzeichnungen enthalten alles, was auf dem Bildschirm stand, behandeln Sie sie also wie Geheimnisse.

Sie möchten eine Wiedergabe, ohne script oder asciinema einzurichten? Wardterm zeichnet die Sitzung für Sie auf und speichert sie verschlüsselt auf Ihrem Gerät. Zeigen

Aktualisiert am . script und scriptreplay aus util-linux 2.41 sowie asciinema 2.4 liefen unter Debian 13 in einem Wegwerf-Container; script -r und -p liefen unter macOS.

Wer zeichnet auf: Sie, ein Werkzeug oder der Server

SSH selbst behält keine Kopie dessen, was in einer Sitzung passiert. sshd protokolliert die Anmeldung, wie in SSH-Anmeldeversuche prüfen gezeigt, und danach nichts mehr. Um die Sitzung festzuhalten, brauchen Sie einen Rekorder, und wo er läuft, bestimmt, was er kann.

WerkzeugLäuft aufZeichnet aufGeeignet für
scriptIhrem Rechner oder dem ServerAusgabe, optional Eingabe, mit ZeitangabenSchnelles eigenes Protokoll, schon installiert
asciinemaIhrem Rechner oder dem ServerAusgabe mit Zeitangaben, eine DateiDemos, Wiedergaben weitergeben
tlogDem ServerJede Sitzung ausgewählter BenutzerSitzungen, die Sie nicht selbst steuern
sudo-I/O-LogDem ServerNur mit sudo ausgeführte BefehleAdministrative Eingriffe

Ein Rekorder auf Ihrer Seite erfasst, was Sie sehen, auf jedem Server, ohne diese anzufassen. Ein Rekorder auf dem Server erfasst jeden, der sich anmeldet, und der Benutzer kann ihn nicht einfach umgehen.

Mit script aufzeichnen

script aus util-linux ist auf fast jedem Linux-System vorhanden. Starten Sie es und verbinden Sie sich aus der Shell, die es öffnet:

script --log-io session.log --log-timing session.tm
ssh deploy@server

Arbeiten Sie wie gewohnt. Wenn Sie fertig sind, melden Sie sich vom Server ab und geben exit ein, um die Aufzeichnung zu beenden. So zeichnen Sie genau eine Verbindung auf und hören auf, wenn sie endet:

script -q --log-io session.log --log-timing session.tm -c "ssh deploy@server"

Abspielen im Terminal: Die Leertaste pausiert, die Pfeiltasten nach oben und unten ändern das Tempo, und --divisor 4 spielt mit vierfacher Geschwindigkeit:

scriptreplay --log-io session.log --log-timing session.tm
scriptreplay --log-io session.log --log-timing session.tm --divisor 4

--log-io speichert neben der Ausgabe auch Ihre Eingaben. Mit --log-out behalten Sie nur die Ausgabe. scriptreplay --summary zeigt Startzeit, Shell und Befehl der Sitzung.

Unter macOS ist script die BSD-Version mit anderen Optionen. -r zeichnet mit Zeitangaben auf, -p spielt ab:

script -r session.rec ssh deploy@server
script -p session.rec

Mit asciinema aufzeichnen

asciinema speichert die Sitzung als eine einzige .cast-Datei, einfache JSON-Zeilen mit einer Zeitangabe für jedes Stück Ausgabe. Installieren Sie es über Ihren Paketmanager (apt install asciinema, dnf install asciinema, brew install asciinema), dann:

asciinema rec -i 2 -c "ssh deploy@server" session.cast
asciinema play session.cast
asciinema play -s 4 session.cast

-i 2 kürzt Pausen über zwei Sekunden, damit sich die Wiedergabe angenehm ansehen lässt. Geben Sie immer einen Dateinamen an: Dann bleibt die Datei auf Ihrer Festplatte und nichts wird hochgeladen. Tastenanschläge werden nur mit --stdin gespeichert.

Jede Sitzung auf dem Server mit tlog aufzeichnen

Wenn es um die Sitzungen anderer Personen geht, muss der Rekorder auf dem Server laufen. tlog gibt es als Paket für RHEL, Rocky, AlmaLinux und Fedora. Am einfachsten machen Sie es zur Login-Shell der aufzuzeichnenden Benutzer:

sudo dnf install tlog
sudo usermod -s /usr/bin/tlog-rec-session deploy

tlog-rec-session startet die eigentliche Shell (standardmäßig bash, einstellbar in /etc/tlog/tlog-rec-session.conf) und schreibt die Sitzung ins systemd-Journal. Auf einem System mit SSSD können Sie Benutzer und Gruppen stattdessen an einer Stelle festlegen:

[session_recording]
scope = some
users = deploy
groups = admins

Schreiben Sie diese Zeilen nach /etc/sssd/conf.d/sssd-session-recording.conf, setzen Sie die Datei auf Modus 600 und starten Sie sssd neu. Zum Abspielen suchen Sie die Aufzeichnungs-ID im Journal und übergeben sie an tlog-play:

journalctl -o verbose | grep -m5 TLOG_REC=
tlog-play -r journal -M TLOG_REC=1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d-2f1-4d2e1

Standardmäßig lässt tlog Tastenanschläge weg (log.input ist false), Passwörter an einer Eingabeaufforderung werden also nicht gespeichert. Schalten Sie das Eingabeprotokoll nur ein, wenn Sie es wirklich brauchen.

Nur sudo-Befehle aufzeichnen

Wenn es nur darauf ankommt, was Administratoren als root ausführen, kann sudo die Ausgabe jedes Befehls aufzeichnen. Legen Sie mit sudo visudo -f /etc/sudoers.d/io-log eine Datei an:

Defaults log_output
Defaults!/usr/bin/sudoreplay !log_output

Die zweite Zeile verhindert, dass sudo seine eigenen Wiedergaben aufzeichnet. Dann listen Sie die Sitzungen auf und spielen sie ab:

sudo sudoreplay -l
sudo sudoreplay 000001

Die Aufzeichnungen landen in /var/log/sudo-io. Das ist schnell eingerichtet und passt gut zu sudo sicher über SSH nutzen, sieht aber nichts, was ohne sudo passiert.

Geheimnisse aus Aufzeichnungen heraushalten

Eine Aufzeichnung enthält alles, was über den Bildschirm lief: ein API-Token aus env, einen privaten Schlüssel, angezeigt mit cat, ein Datenbankpasswort auf der Kommandozeile. Einige Gewohnheiten helfen:

  • Zeichnen Sie nur die Ausgabe auf, wenn Sie die Tastenanschläge nicht brauchen. Passwörter an einer verdeckten Eingabe landen dann nie in der Datei.
  • Geben Sie keine Geheimnisse aus, die Sie nicht sehen müssen. Lesen Sie sie aus einer Datei oder Variablen, statt sie in Befehle einzufügen.
  • Bewahren Sie Aufzeichnungen wie Zugangsdaten auf: chmod 600, auf einem verschlüsselten Datenträger, gelöscht, sobald sie nicht mehr gebraucht werden.
  • Aufzeichnungen auf einem Server kann root auf diesem Server ändern. Wenn sie später Bestand haben müssen, schicken Sie sie schon beim Schreiben auf einen anderen Rechner.

SSH-Sitzungsaufzeichnung, die verschlüsselt auf Ihrem Gerät bleibt, hilft, wenn die Aufzeichnungen auf einem Laptop liegen, der verloren gehen kann.

Was wofür

  • Ein Protokoll der eigenen Arbeit, auf jedem Server: script oder der Rekorder Ihres SSH-Clients.
  • Eine Wiedergabe, die Sie jemandem zeigen möchten: asciinema.
  • Jede Sitzung bestimmter Benutzer, egal mit welchem Client: tlog auf dem Server.
  • Nur privilegierte Befehle: sudo-I/O-Logs.

Wenn es darum geht, Arbeit nach einem Verbindungsabbruch am Laufen zu halten statt sie nachzuvollziehen, brauchen Sie stattdessen tmux, siehe SSH-Sitzungen mit tmux weiterlaufen lassen.

Fragen

Kann ich eine bereits laufende SSH-Sitzung aufzeichnen?

Nicht mit diesen Werkzeugen. script, asciinema und tlog starten alle vor der Shell. Innerhalb von tmux können Sie mit tmux capture-pane -p -S - sichern, was noch im Scrollback steht, allerdings als Text ohne Zeitangaben.

Zeichnet SSH Sitzungen von selbst auf?

Nein. sshd protokolliert, wer sich wann mit welchem Schlüssel verbunden hat, aber nicht, was eingegeben oder angezeigt wurde. Dafür brauchen Sie einen Rekorder auf dem Client oder auf dem Server.

Werden Passwörter in einer Aufzeichnung gespeichert?

Passwörter an einer verdeckten Eingabeaufforderung erscheinen nicht in der Ausgabe. script --log-io und tlog mit Eingabeprotokoll speichern aber auch Tastenanschläge, dort stehen diese Passwörter also im Eingabelog. Alles, was auf dem Bildschirm ausgegeben wird, etwa ein Token oder ein Schlüssel, steht immer in der Aufzeichnung.

Darf ich die Sitzungen anderer Personen aufzeichnen?

Das hängt davon ab, wo Sie arbeiten. Vielerorts müssen die Benutzer vorher informiert werden, üblicherweise über ein Login-Banner.

Quellen

Mehr zu Sitzungen und tmux

Alle Anleitungen