2017-03-06 9 views
0

Ich versuche, vi-Befehle in einem Skript zu verwenden, zusätzlich versuche ich, Sudo-Passwort in demselben Skript zu übergeben. So habe ich etwas wie:Sudo-Passwort von einer Pipe lesen

echo mypassword | bash -c "echo $'Goappendthis\E:x\n' | sudo vi /etc/test" 

vi Befehl ist erfolgreich, aber es fragt immer noch Passwort. Wie kann ich es tun, ohne Passwort, damit ich denselben Befehl für mehrere Hosts in einem Skript ausführen kann?

+1

BTW, wird es als 'ex' Aufruf setzen' vi' in einen Modus für nicht interaktive Einsatz oder mit 'vi -s scriptfile' liest vi-Befehle von ausführen 'Skriptdatei'. –

+0

Danke für Ihre Kommentare. Seltsamerweise wird es mir eine unternehmensweite Richtlinie nicht erlauben, root-eigene Dateien mit sed, awk, python oder perl liner zu ändern. Es sieht so aus, als ob es nur erlaubt, Dateien mit sudo vi zu modifizieren, und da ich Hunderte von Hosts modifizieren muss, muss ich eine Möglichkeit finden, dies zu automatisieren. Also im Grunde muss ich sudo vi gleiche Datei eine Zeile am Ende der Datei hinzufügen und speichern Sie es dann. Wie kann ich es sonst machen? – JavaRed

+1

Selbst wenn Sie dem Brief der Policy entsprechen, werden Sie diesem Geist hier sicherlich nicht gerecht. Wie auch immer, die typische Right Thing ist die Verwendung von Einrichtungen, die von jedem Orchestrierungssystem bereitgestellt werden - Puppet, Chef, SaltStack, CFEngine, etc usw. - Ihr Unternehmen verwendet die Templatisierung der Dateigenerierung. –

Antwort

0

Erstens: Tun Sie das nicht. Verwenden Sie einen Mechanismus für die Rechteerweiterung, bei dem keine Passwörter weitergegeben werden müssen.

Zweitens: Sofern nicht -S oder --stdin, sudosudo eingegeben wird Passwörter direkt von der TTY, nicht von stdin.

Drittens: Sie müssen das Passwort zu sudo lenken 's stdin ohne auch vi zwingende' s stdin. das zu tun wie folgt aussehen könnte:

echo mypassword | sudo --stdin -- bash -c "echo $'Goappendthis\E:x\n' | vi /etc/test" 
+0

Ich weiß, das ist keine ideale Lösung, aber für den Moment kann ich als Workaround verwenden. Danke vielmals. – JavaRed

Verwandte Themen