Terminal-Befehle samt Ausgabe speichern und abspielen

Datum

[ script ]

Das erste um seine Eingaben im Linux-Terminal zu speichern und anschließend wiederzugeben ist script, welches meist schon vorinstalliert ist.
Falls nicht, findet man dieses Tool im Paket util-linux.
script speichert alle Eingaben als Klartext, Sollte kein Dateiname als Ziel angegeben werden wird typescript als Standardname verwendet.

Aufzeichnung starten

Um mit der Aufzeichnung zu beginnen, verwendet man:
script --timing=<dateiname> <dateiname>

Timing Datei
Der Parameter --timing gibt an unter welchem Dateinamen die Zeitangaben gespeichert werden, welche bei der Aufzeichnung entstehen.
Eine solche Datei hat dann in etwa den folgenden Inhalt:

0.061325 156
2.185293 2
0.000062 2
0.000138 17
0.000664 156
1.461482 1

Hierbei gibt die erste Spalte an wie viel Zeit seit der letzten Eingabe vergangen ist und die zweite Spalte gibt an wie viel Zeichen dann ausgegeben wurden.

Beispiel:
script --timing=time.txt testfile
Hierbei werden die Zeitangaben in der time.txt und die eigentlichen Terminal Ein/Ausgaben in der testfile gespeichert.

Sobald der Befehl ausgeführt wurde sollte folgende Meldung erscheinen:
Skript gestartet, die Datei ist testfile

Nun kann man regulär weiterarbeiten und dabei werden nun alle Eingaben, welche auch im Terminal sichtbar sind, aufgezeichnet.
Sollten Passwörter eingegeben werden, so werden diese nicht mit gespeichert, da diese ja auch nicht im Terminal sichtbar erscheinen.

Aufnahme stoppen

Um die Aufnahme dann zu stoppen, reicht es ein einfaches exit einzugeben, alternativ funktioniert auch Strg+D.
Anschließend sollte folgende Meldung erscheinen:
Skript wurde beendet, die Datei ist testfile

Aufnahme abspielen

um sich nun das gespeicherte anzuschauen, verwendet man:
scriptreplay --timing=time.txt testfile

Nun wird die Aufnahme mit den entsprechenden Ein/Ausgaben noch einmal im Terminal ausgeben.

[ sudo-io ]

Ein Script als Login-Shell

Damit die eingegebenen Befehle mitgeloggt werden, muss der Benutzer in eine extra Shell geworfen werden.
Dies geschieht, indem man als Shell für den Login eines Remote-Benutzers ein vorbereitetes Shell-Script angibt.

Bsp.: testuser:x:1001:1001:,,,:/home/testuser:/usr/local/bin/logshell.sh

hierzu wird bei der Einrichtung des Benutzers per --shell das entsprechende Script als Login-Shell festgelegt.

Das Shell-Script sollte folgenden Inhalt haben:

#!/bin/bash
/usr/bin/sudo -u `whoami` /bin/bash -c "/bin/bash"
unset SUDO_COMMAND

hierbei kann man natürlich noch andere Befehle aufrufen, z.B. Ausgeben von Hinweisen oder ähnliches…

Diese Script sollte nach der Erstellung auch entsprechende Ausführungsrechte bekommen z.B. per chmod +x /usr/local/bin/logshell.sh

Eintrag in die sudoers

Die sauberste Variante ist das anlegen einer entpsrechenden Datei unter /etc/sudoers.d, welche folgenden Inhalt haben sollte:

%testuser ALL=(%testuser)   LOG_INPUT: LOG_OUTPUT: ALL
Defaults:%testuser env_keep+="SSH_AUTH_SOCK"

[ Hierbei sollte testuser natürlich durch den entsprechenden Gruppennamen/Benutzernamen ersetzt werden ]

Log

Das Log wird beim einloggen des Benutzers angelegt und die eingegebenen Daten werden pro Session gespeichert.
Der Speicherort ist hierbei /var/log/sudo-io

Der Aufbau des logs sieht für jede Session in etwa wie folgt aus:

├── 00
│   └── 00
│       └── 01
│           ├── log
│           ├── stderr
│           ├── stdin
│           ├── stdout
│           ├── timing
│           ├── ttyin
│           └── ttyout
└── seq
Abspielen des Logs

um sich eine Session anzuschauen verwendet man den Befehl sudoreplay <Session-ID>.
Die Session-ID setzt sich aus dem Namen des Ordners der entsprechenden Session zusammen.
Im oben gezeigten Beispiel lautet der Aufruf z.B.: sudoreplay 000001 (hierzu muss man nicht extra in das Log-Verzeichnis wechseln)

[ ttyrec ]

Ähnlich wie script speichert auch ttyrec seine Informationen mit entsprechenden Zeitstempel in eine Datei.
ttyrec findet sich in den meisten Repos zum nachinstallieren.

Aufnahme starten

Um eine Aufnahme zu starten verwendet man einfach nur ttyrec. Will man das in einer bestimmten Datei speichern, so gibt man -a an.
Bsp.: ttyrec -a tesfile
Mittels ttyrec -e <Programmname> kann ein Programm ausgeführt und gleichzeitig die Aufzeichnung gestartet werden.

Aufnahme stoppen

Ähnlich wie bei script wird die Aufnahme mittels exit gestoppt, alternativ funktioniert auch Strg+D.

Aufnahme abspielen

Der Befehl zum abspielen lautet: ttyplay <dateiname>

Es gibt auch weitere Tools, welche solche eine ttyrec-Session in ein .gif oder ähnliches umwandeln können.

[ playitagainsam ]

Inspiriert durch die beiden obigen Tools und dem Python-Tool playerpiano entstand das Tool playitagainsam.
Hierbei kann der Output von mehreren Terminals aufgezeichnet und ausgegeben werde.
playitagainsam findet sich z.B. bei Fedora in den Standard-Repos.

Aufnahme starten

Um eine Aufnahme zu beginnen verwendet man:
pias record <dateiname>

Der aufgezeichnete Output wird hierbei in eine JSON-Datei gespeichert.

Mit dem Parameter --join ist es möglich mehrere Terminal-Sessions parallel aufzuzeichnen. Das eignet sich gut für z.B.: Aufzeichnung Server-Client Funktionsweisen.

Bsp: pias --join record <dateiname>

Aufnahme stoppen

Auch hier wird die Aufnahme mittels exit gestoppt.

Aufnahme abspielen

Um das gespeicherte Abzuspielen verwendet man:
pias play <dateiname>

Autor
Kategorien Linux, Scripting

PRTG Map