Protokollbefehle, die über ssh ausgeführt werden

8

Ich möchte alle über SSH ausgeführten Befehle protokollieren.

Sagen,

ssh something@server.com COMMAND

Ich möchte "COMMAND" auf server.com protokollieren

Ich habe ausgiebig gesucht, konnte aber nichts finden.

Es gibt noch eine ähnliche Frage, aber ich glaube nicht, dass es dort eine Lösung gibt.

So protokollieren Sie "Remote-Ausführung über SSH"

Ich kann eine Live-Ansicht mit bekommen

pstree -p | grep ssh

Ich habe Snoopy, auditd und sudosh ausprobiert, konnte diese Befehle jedoch nicht über ssh protokollieren.

Es gibt eine http://freecode.com/projects/shwatchr . aber ich kann das Skript zum Testen nicht herunterladen.

Gibt es eine andere Möglichkeit, dies zu erreichen?

Vielen Dank.........

Prashanth
quelle

Antworten:

4

Anstatt sich auf SSH zu konzentrieren, treten Sie einen Schritt zurück und erwägen Sie die Verwendung von auditd. Ich gehe davon aus, dass Sie wirklich die Benutzer verfolgen möchten und nicht, was mit SSH gemacht wird, im Gegensatz zu anderen Anmeldetypen.

man auditctl sollte Ihnen einen Ausgangspunkt geben.

Jenny D.
quelle
Netter Hinweis, aber für mich zu abstrakt. Wie verwende auditctlich das Protokollieren von SSH-Befehlen?
Guettli
3

Ich habe einen Test mit dieser Option in meinem Server-Suse-Labor durchgeführt und es funktioniert, aber vielleicht gibt es einen besseren Weg.

ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"
c4f4t0r
quelle
Dadurch wird der gesendete Befehl protokolliert, aber nicht auf dem Remote-System ausgeführt.
Michael McGarrah
1

Ich habe einen Weg gefunden, dies zu tun. Es gibt ein Perl-Skript von John M. Simpson ( https://www.jms1.net/ ).

Alles was Sie tun müssen, ist hinzuzufügen

command="#{path to log-session}"

vor jedem Schlüssel in Ihren ~ / .ssh / autorisierten_ Schlüsseln

Es funktioniert nur, wenn Sie ein ssh ohne Passwort haben, aber dies löst meinen Zweck bis zu einem gewissen Grad.

http://www.jms1.net/log-session

Prashanth
quelle
1

In meinem Fall hatte ich genau die gleiche Anforderung. Die einzige Einschränkung bei dieser Methode ist, dass ich nicht sicher bin, wie sie funktioniert, wenn Sie keine SSH-Schlüssel verwenden. Ich habe ein kurzes Bash-Skript erstellt, um den Befehl vor der Ausführung zu protokollieren:

#!/bin/bash
echo "$(date -Is) ${SSH_ORIGINAL_COMMAND}" >> ~/sshcommands.log
sh "${SSH_ORIGINAL_COMMAND}"

Ich habe diesen Befehl in ~ / bin / log-Befehlen gespeichert und ihn dann ausführbar gemacht ( chmod +x ~/bin/log-commands).

In der Datei "authorized_keys" habe ich den command=Parameter zu der Zeile hinzugefügt , die zu dem SSH-Schlüssel gehört, für den ich Protokolle haben wollte, sodass das Skript "log-command" ausgeführt werden muss:

command = "/ home / tricky / bin / log-befehle" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ ...... 6J0C1 [email protected]

Wenn jemand die Protokollierung kennt, aber nicht möchte, dass Sie die Befehle sehen, kann er einfach in eine interaktive Sitzung gehen. Wie Sie bereits erwähnt haben, haben Sie bereits Snoopy ausprobiert, was das für Sie erledigen wird. Beliebte Alternativen, die ich nicht ausprobiert habe, sind rootsh, sudosh und log-user-session.

zaTricky
quelle
1

Würde Snoopy Ihnen dabei helfen? "Protokollieren Sie jeden ausgeführten Befehl in syslog (auch bekannt als Snoopy Logger)."

https://github.com/a2o/snoopy

Ben Lavender
quelle