Ich führe einen Remote-Befehl über SSH aus und muss die Ausgabe dieses Befehls analysieren. Die Remote-Stdout-/Stdderr-Ausgabe wird von SSH problemlos an meine lokale Box auf der Stdout-/Stdderr-Ausgabe meines lokalen SSH-Befehls zurückgeleitet. Dies schlägt jedoch fehl, wenn SSH seine eigenen Status-/Fehlermeldungen auf meiner lokalen Stdout-/Stdderr-Ausgabe multiplext.
Gibt es eine Möglichkeit, meinem lokalen SSH-Befehl mitzuteilen, dass er seine eigenen Nachrichten an eine lokale Datei senden soll? Oder muss ich meine Remote-Befehle so einrichten, dass sie ihre eigenen Ausgaben an ein Paar Remote-Dateien senden und diese dann per SCP zurücksenden, um sie sicher zu analysieren?
Antwort1
Der SSH-Client verfügt über zwei Schalter zum Reduzieren/Eliminieren der Ausführlichkeit.
AusMann ssh:
-q Quiet mode. Causes all warning and diagnostic messages to be
suppressed.
-y Send log information using the syslog(3) system module. By
default this information is sent to stderr.
Der -y
Schalter ist wahrscheinlich das, was Sie möchten, aber er ist nicht in allen Versionen verfügbar.
Die aktuelle Version von Ubuntu (OpenSSH_6.0p1 Debian-3ubuntu1, OpenSSL 1.0.1c 10. Mai 2012) unterstützt es, andere Versionen jedoch möglicherweise nicht.
Sie können die Protokolle bezüglich SSH bei Bedarf in einer anderen Protokolldatei speichern.
Wenn Sie beispielsweise rsyslog verwenden, erstellen Sie die Datei /etc/rsyslog.d/ssh.log
und speichern Sie die folgende Zeile darin:
:msg,contains,"ssh:" /var/log/ssh.log
Starten Sie nun rsyslog neu, indem Sie den folgenden Befehl ausführen:
sudo service rsyslog restart
Um auf die Protokolle zu einem bestimmten SSH-Prozess mit PID zuzugreifen $PID
, können Sie grep verwenden:
grep "ssh\[$PID\]" /var/log/ssh.log