Protokollbefehle werden clientseitig über SSH ausgeführt

Protokollbefehle werden clientseitig über SSH ausgeführt

Ich suche nach einer Möglichkeit, SSH (insbesondere, aber nicht unbedingt, OpenSSH) auszuführen und alle Befehle, die ich gegen die Remote-Verbindung ausführe, lokal in einer Datei zu protokollieren.

Wenn ich jeden Befehl als unabhängigen SSH-Befehl ausführe, würde ich zwar jeden Befehl in meinem lokalen Verlauf protokollieren, aber es ist im Allgemeinen nicht wünschenswert, z. B.

ssh [email protected] -- foo -a --bar baz

für jeden Befehl.

Ich würde mich lieber auf normale Weise per SSH mit dem Server verbinden, entweder über SSH selbst oder über einen Wrapper-Befehl wie „ssh-logging“.

Ich stelle mir vor, dass das Programm über SSH eingegebene Befehle in einer Datei auf dem lokalen Client-Rechner speichert, vergleichbar mit der Art, wie Shells das tun. Beispielsweise scheint ~/.ssh_history ein guter Standard zu sein, vielleicht permutiert pro Benutzer+Host-Kombination, aber wo es speichert, ist mir im Moment eigentlich egal.

Kurz gesagt, ich möchte, dass ungefähr Folgendes passiert:

~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $

Gibt es so etwas, entweder als obskure OpenSSH-Clientkonfiguration oder als Teil eines anderen Open-Source-/Libre-SSH-Clients oder als dünnes Wrapper-Programm, das sich einfach in den Weg der Standardeingaben des Benutzers stellen und diese transparent an die Standardeingabe des laufenden Programms senden und gleichzeitig protokollieren kann? (Ich habe gehört, dass SecureCRT eine Protokollierungsfunktion hat, die vielleicht ungefähr so ​​ist, aber zumindest in meinem Privatleben habe ich kein Verlangen danach, andere Tools als FLOSS zu verwenden.)

Antwort1

Wenn Sie unter Unix arbeiten, das Standard-Dienstprogrammscriptist für diesen Zweck konzipiert. Wenn Sie es scriptohne Argumente ausführen, startet es eine Kopie Ihrer Shell und protokolliert die Sitzung in einer Datei namens „typescript“:

~ jdoe$ script
Script started, output file is typescript
bash-3.2$ date
Fri May  8 16:29:44 EDT 2015
bash-3.2$ exit
exit

Script done, output file is typescript
~ jdoe$ cat typescript
Script started on Fri May  8 16:29:42 2015
bash-3.2$ date
Fri May  8 16:29:44 EDT 2015
bash-3.2$ exit
exit

Script done on Fri May  8 16:29:45 2015
~ jdoe$ 

Sie können die Datei angeben, in die geloggt werden soll, und den Befehl, der anstelle der Shell ausgeführt werden soll. Dieser Teil ist nicht vollständig standardisiert. Auf meinem OSX-System würden Sie es folgendermaßen ausführen:

script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost

Mit der gängigen Linux-Version würden Sie es folgendermaßen ausführen:

script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log

Antwort2

Dank anEugen Rieck's Kommentar über das Weiterleiten von SSH über Tee, konnte ich eineProtokollierungs-Wrapper um SSHdas tut, was ich gesucht habe.

verwandte Informationen