Dieses Blog durchsuchen

Sonntag, 5. Dezember 2010

Remote Command Diff

Ab und zu möchte ich Programme oder Befehle auf einem lokalen Server und einem bestimmten Remote Server ausführen. Dabei wäre es richtig cool, wenn man dies in einem Schritt machen könnte und idealerweise noch den Output der beiden Befehle miteinander vergleicht. Besonders praktisch für Befehle wie zum Beispiel crontab -l um die Crontab Einträge auf beiden Servern abzugleichen.

Mit ssh ist es ja möglich auch Befehle auf der Remoteseite abzusetzen und mit diff kann man unter anderem Dateien vergleichen. Es ist allerdings auch eine Kombination aus beiden möglich.

Die folgende Bash Funktion habe ich in meiner .bashrc eingetragen:

remote-command-diff ()

    if [ -z "$1" ]; then
        echo "Usage remote-command-diff 'command to execute'";
        return 1;
    fi;
    echo "Remote-Command-Diff [ '>' = local | '<' = remote ]";
    diff <(ssh user@my-remote-host ${@}) <(${@});
    return $?
}



Achtung:
user@my-remote-host

ist nur ein Platzhalter. Angepasst werden muß natürlich noch der tatsächliche User und den zu verwendenden Remote Host bzw. IP Adresse.

Außerdem sollte man diese Funktion nicht auf Befehle anwenden, wo zum einen der gesamte Output relevant ist und zum anderen auch nicht bei interaktiven Eingaben. Trotzdem gibt es jede Menge nützlicher Use Cases.


Beispielanwendung:
user@host:~ $ remote-command-diff crontab -l


Beispielausgabe:
user@host:~ $ remote-command-diff crontab -l
Remote-Command-Diff [ '>' = local | '<' = remote ]
23c23
< */20 * * * 1-7 /home/user/tools/bin/check.sh
> #*/20 * * * 1-7 /home/user/tools/bin/check.sh



In diesem Beispiel sieht man sehr schnell welche Unterschiede in der crontab zwischen dem lokalen und dem Remote Server vorliegen.

Keine Kommentare:

Kommentar veröffentlichen