Notieren Sie das SSH-Terminal in Linux

617
Mohamed Ali Belhajali

Ich konfiguriere einen Bastion-Host

Jump Server

Ich versuche, SSH-Terminals automatisch auf dem Server aufzuzeichnen TermRecord. Das Problem beginnt, wenn ich hinzufügen TermRecord -o ss.htmlzu meinen .bashrc:

echo "TermRecord -o ss.html" >> ~/.bashrc 

Das Terminal wird "Skript gestartet" überfluten, ohne etwas zu speichern.

4

2 Antworten auf die Frage

2
Kamil Maciorowski

Ich habe absolut keine Erfahrung damit TermRecord, meine Antwort basiert auf einer vernünftigen (ich hoffe es) Vermutung, was passiert.

Es sieht wieder wie eine TermRecordQuelle .bashrcaus, oder es ist wahrscheinlicher, dass es eine andere bashausführt, die die Datei enthält. Ich gehe von Letzterem aus . Trotzdem läuft es TermRecordwieder, nochmal eine bashQuelle .bashrcund so weiter.

Wenn Sie sich nicht mehr anmelden können, lesenbash_profilebashrc Sie Login ohne Ausführen von oder . Ich würde versuchen, ssh -t username@hostname /bin/shmeine .bashrcvon dort aus zu reparieren .

Damit es wie erwartet funktioniert, müssen Sie einen Weg finden, die Ausführung zu unterdrücken, TermRecordwenn sie bereits vorhanden ist TermRecord. Der beste Weg wäre, wenn das Programm der Umgebung eine Variable hinzufügt, damit Sie sie erkennen können. Ich kann nicht finden, ob es eine Variable setzt oder nicht.

Sollte dies nicht der Fall sein, können Sie dies selbst tun. Anstatt

TermRecord -o ss.html 

in deiner .bashrcVerwendung so etwas:

[ -z "$TR_PPID" ] && { export TR_PPID=$$; TermRecord -o ss.html; } 

Das bedeutet: Wenn die Variable leer ist, setzen Sie sie auf die Shell-PID und führen Sie sie aus TermRecord. sonst nichts machen (weiter zur nächsten Zeile).

Anmerkungen:

  • Stellen Sie sicher, dass die benannte Variable TR_PPIDnicht von TermRecordirgendetwas anderem verwendet wird. Ich habe diesen Namen gemacht (von "TermRecord Parend PID"), es kann jedoch zu einer Kollision kommen.
  • Hardcoded -o ss.htmlkann zu Problemen führen, wenn Sie sich mehrmals anmelden.
  • Wenn TermRecordausgeführt wird, wird der Rest .bashrcvon dem Äußeren erst bashspät als beendet TermRecordbeschafft. Die innere bashQuelle wird die Datei selbstständig beziehen.
  • Um Verschachtelungsprozesse zu vermeiden, sollten Sie das äußere bashmit ersetzen, TermRecordanstatt einen separaten Prozess zu erstellen. es kann mit gemacht werden exec TermRecord -o ss.html. In diesem Fall möchten Sie wahrscheinlich, dass die gesamte Zeile ganz am Anfang Ihrer Zeile steht .bashrc. Nun würde die Variable "TermRecord PID" bedeuten, also TR_PIDwäre der Name besser.

Mögliche (?) Alternative: TermRecordAls Login-Shell verwenden.

  • Nur wenn es eine Login-Shell unterstützt (ich weiß das nicht); Andernfalls kann dies zu Problemen führen (aber möglicherweise würde dies durch einen benutzerdefinierten Wrapper behoben). Experimente zum Ändern der Login-Shell (siehe chsh) sollten durchgeführt werden, ohne die alte Shell oder sogar eine zusätzliche "Notfall-Shell" zu verlassen. Wenn Sie sich selbst ausschließen und sich nicht neu anmelden können, ist die alte Shell noch aktiv und Sie können sie beheben.
  • Dies erfordert möglicherweise eine Bearbeitung /etc/shells.
  • In diesem Fall sollten Sie nicht starten TermRecordvon Ihrem .bashrcüberhaupt.
0
Sean Davey

Wie ich es verstehe, möchten Sie alle Ihre stdin / stdout-Terminals aufnehmen, während ssh auf einem Server läuft?

Verwendung betrachten Skript - Befehl

script <output_filename> 

und dann ssh zu Ihrem Server, sobald Sie fertig sind, schließen Sie Ihre SSH-Verbindung und

exit 

Um die Skriptaufnahme zu stoppen, befindet sich der von Ihnen angegebene $ output_filename in Ihrem aktuellen Verzeichnis.

ps: Sie können sicherstellen, dass Ihre Aufnahmen immer eindeutig benannt werden, indem Sie die folgende Konvention anwenden

script foo_$(date +"%Y-%m-%d%H%M") # full date and time included in filename 

oder

script foo_$(date +%s) # unique number calculate by seconds since the Unix epoch