Folgende Schritte muss ich auf mehreren Servern durchführen:
- mit meinem Benutzernamen anmelden
- eintippen
sudo su -
- eintippen
amCLI -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/amCLI
ohne 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 su
ist sudo -s
, obwohl sudo su -
es meiner Meinung nach mehr kann.)
Die zweite Version könnte unter bestimmten Bedingungen funktionieren: sudo
Sie sollte nicht nach einem Passwort fragen und amCLI
sich 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/amCLI
oder was auch immer es ist.