Programme auf anderen Servern mit SSH ausführen
01.07.2009 | Kategorie: HowTo, Top ArtikelIm Server-Bereich hat man häufiger das Problem, dass man von Server A einen Befehl auf Server B ausführen möchte, um das Ergebnis auf Server A weiterverarbeiten zu können.
SSH-Verbindungen bieten sich dazu an, eine gesicherte Verbindung zwischen diesen Servern herzustellen.
ssh -l user serverB ‘ls -als’
Dieses Befehl würde auf ’serverB’ das Kommando ‘ls -als’ ausführen.
Aus Sicherheitsgründen möchte man jedoch oft, dass nur ein einziges Kommando ausgeführt werden kann. Denn das Kommando ‘\rm -R *’ wäre Fatal.
OpenSSH bietet die Möglichkeit zuätzlich zu den autorisierten Schlüsseln in der Datei authorized_keys auch noch eine Befehl vorzugeben, der ausgeführt werden soll. Der Befehl wird in diesem Fall ausgeführt und die SSH-Verbindung wieder geschlossen.
command=’ls -als’ ssh-dss AAAA….KEY
Schade an dieser Möglichkeit ist nur, dass man auf diesem Weg keine Parameter übergeben kann. Über ein Perl-Script z.B. kann man aber den eigentlich auszuführenden Befehl, welcher auf Grund der command-Anweisung in der authorized_keys nun nicht mehr ausgeführt wird, auslesen.
ssh -l user serverB “parameter”
Obwohl der Server nun nur den in der authorized_keys angegebenen Befehl ausführt (Dieser Befehl kann auch das Ausführen eines Perl-Scripts sein), hat man nun die Möglichkeit Parameter zu übergeben. ‘parameter’ wird nämlich in der Umgebungsvariable ‘$ENV{SSH_ORIGINAL_COMMAND}’ gespeichert.
Ein Perl-Script kann den dort übergebenen Parameter auslesen und entsprechend weiterverarbeiten.