Verwenden Sie den Befehl sudo für den Skript-SSH-Server

Verwenden Sie den Befehl sudo für den Skript-SSH-Server

Folgende Schritte muss ich auf mehreren Servern durchführen:

  1. mit meinem Benutzernamen anmelden
  2. eintippensudo su -
  3. eintippenamCLI -l 32/1 | grep Firmware

Ich möchte das alles also in einem Skript schreiben. Meine Idee war:

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo su-; amCLI -l 32/1 | grep Firmware"
done

oder

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo amCLI -l 32/1 | grep Firmware"
done

Beides funktioniert jedoch nicht.

Antwort1

Eine bessere Lösung besteht darin, sudo so einzurichten, dass Ihr Benutzer die Ausführung /full/path/to/amCLIohne Angabe eines Kennworts durchführen kann.

Dann können Sie einfach

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
    ssh -n vneudeck@$hostname sudo /full/path/to/amCLI -l 32/1 | grep Firmware
done

Antwort2

Vielleicht hilft es, vneudeck@$hostname in doppelte Anführungszeichen zu setzen. Und zwischen su und - ist kein Leerzeichen - ich hoffe, das ist hilfreich

Antwort3

Das erste wird nicht funktionieren:

sudo su -; amCLI -l 32/1 | grep Firmware

Dies würde ausführen sudo su -und wenn dies zurückgegeben wird (d. h. wenn Sie mit der Verarbeitung der Befehle als Root fertig sind und beendet haben), würde es amCLI ausführen. (Beachten Sie auch, dass eine Alternative zu sudo suist sudo -s, obwohl sudo su -es meiner Meinung nach mehr kann.)

Die zweite Version könnte unter bestimmten Bedingungen funktionieren: sudoSie sollte nicht nach einem Passwort fragen und amCLIsich in PATH befinden (nicht im Root-Pfad, der wahrscheinlich festgelegt wird, wenn Sie eingeben sudo su -, sondern in Ihrem Pfad, da sudo Ihren Pfad verwendet). Versuchen Sie, den vollständigen Pfad zu anzugeben amCLI, z. B. /usr/local/sbin/amCLIoder was auch immer es ist.

verwandte Informationen