Wie lässt sich die Eingabe eines Passworts in einer benutzerdefinierten Batchdatei automatisieren?

Wie lässt sich die Eingabe eines Passworts in einer benutzerdefinierten Batchdatei automatisieren?

Ich weiß, dass das für die meisten von Ihnen naiv klingen wird, aber ich bin noch neu bei Linux, also haben Sie bitte Geduld mit mir.

Ich versuche, eine Batchdatei zu erstellen, um einige Befehle zu automatisieren.
Einer dieser Befehle ist der, sudo -ida ich auf einige Dateien im Stammverzeichnis zugreifen muss.

Mein Skript sieht bisher also folgendermaßen aus:

#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh

Ich weiß, dass danach sudo -ieine Aufforderung zur Kennworteingabe folgt. Kann ich das in meinem Skript emulieren?

Antwort1

Sie können es sudoaus Ihrem Skript herausnehmen und sicherstellen, dass Benutzer das Skript mithilfe von aufrufen sudo scriptname.

Entfernen Sie sudo -idie Zeile aus Ihrem Skript und ersetzen Sie sie durch Folgendes:

# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
    echo You must call this script using sudo. Aborting.
    exit 99
fi

Antwort2

Gute Frage. Aber es ist dringend anzuraten, dass Sie nicht so vorgehen, wie Sie es derzeit versuchen/vorstellen. Der Grund, warum Sie Ihren Ansatz vermeiden sollten, ist, dass Sie Ihr Passwort in eine Textdatei eingeben müssen, die von anderen Benutzern/Angreifern gelesen werden könnte. Sie könnten die Datei auf 600 Berechtigungen setzen, sodass sie nur von Ihrem Benutzer (und Root) gelesen werden kann, aber ich bin mir nicht sicher, ob die Unterbefehle des Skripts irgendwo protokolliert werden könnten, wodurch Ihr Passwort potenziellen Angreifern wieder zugänglich wird. Ich nehme an, die eigentliche Frage ist, warum Sie das Skript benötigen, um sich automatisch als Root anzumelden?

Handelt es sich um einen automatisierten Prozess oder gibt es einen anderen Grund, warum Sie nicht einfach auf die Kennwortabfrage reagieren können, die beim Ausführen des Skripts angezeigt wird? Wenn es sich um einen automatisierten Prozess handelt, sollten Sie einfach die sudo-Zeile entfernen und den Skriptaufruf zum Cron des Root-Benutzers hinzufügen. Es gibt Unmengen an Dokumentation zum Einrichten von Cron-Jobs, die über eine einfache Google-Suche verfügbar sind. Sie können jedoch mit Folgendem beginnen:Das)

Darüber hinaus ist dies ein Skript, das einfach ein anderes Skript aufruft. Sie sollten run-server.sh wahrscheinlich nur für Root ausführbar machen, sich dann einfach mit sudo suals Root anmelden und es dann mit ausführen /my-server/bin/run-server.sh. Sie können dies wiederum zum Cron des Roots hinzufügen, wenn Sie es nach einem Zeitplan automatisieren müssen.

WARNUNG:Schreiben Sie kein Skript dafür undbesondersGeben Sie es nicht in eine Befehlszeile ein (es wird protokolliert)

echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh

verwandte Informationen