it-swarm.com.de

sudo mit Passwort in einer Kommandozeile?

An arbeitsreichen Tagen möchte ich rennen

$ ./configure && make && Sudo make install && halt

in der Nacht und ins Bett gehen, in der Hoffnung, die Anwendung würde automatisch installiert. Aber was ich am nächsten Tag sehe, ist der Bildschirm, auf dem Sudo mich nach dem Passwort fragt. Wie könnte ich Sudo mit Passwort in einer Befehlszeile ausführen oder gibt es eine andere Methode, um dies zu tun?

103
Jichao

Ja, benutze den -S Schalter, der das Passwort von STDIN liest:

$echo <password> | Sudo -S <command>

Für Ihren Fall würde es also so aussehen:

$./configure && make && echo <password> | Sudo -S make install && halt

natürlich ersetze <password> durch dein passwort.

152
John T

Sie können Ihre Befehlszeile folgendermaßen ersetzen:

$Sudo su

$./configure && make && make install && halt

Sie werden sofort zur Eingabe Ihres Kennworts aufgefordert, und der Rest der Befehle wird als Superuser ausgeführt.

10
CarlF

Einige der anderen Lösungen haben den Nachteil, dass sie ./configure und make unnötigerweise als root ausführen.

Das ist ein bisschen kompliziert, aber es sollte funktionieren:

Sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"

Beachten Sie die Verwendung von doppelten Anführungszeichen, damit $USER von der Shell (ohne Rootberechtigung) erweitert werden kann.

Ich kann auch einen sleep 60 vor dem Befehl halt einfügen. Ich habe manchmal Dinge wie diese getan, in der Erwartung, dass der Befehl lange ausgeführt wird, aber etwas läuft schief und er wird sofort beendet. Mit der sleep kann ich den Befehl beenden, bevor das System heruntergefahren wird. Oder Sie können shutdown mit einem Zeitargument verwenden.

10
Keith Thompson

Sie können Sudo auch mit visudo konfigurieren, damit der Benutzer make als Sudo ohne Kennwort verwenden kann.

User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS
9
Natim

Setze HISTIGNORE auf " Sudo -S "

$ export HISTIGNORE='*Sudo -S*'

Dann geben Sie Ihr Passwort sicher an Sudo weiter:

$ echo "your_password" | Sudo -S -k <command>

"HISTIGNORE" bedeutet, diesen Befehl nicht in der Historie zu speichern. Dies ist der Verlauf im Speicher oder die Datei "~/.bash_history".

Im Folgenden wird beispielsweise Ihr Kennwort sicher an den Sudo-Befehl weitergeleitet, ohne dass der Verlauf Ihres Kennworts beibehalten wird.

"-S" bedeutet, stdin für das Passwort zu verwenden,

"-K" bedeutet, zwischengespeicherte Anmeldeinformationen zu ignorieren, um Sudo zu zwingen, immer danach zu fragen. Dies ist für ein konsistentes Verhalten.

$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -k whoami
$ echo "<your_password>" | Sudo -S -k cat /etc/shadow
$ echo "<your_password>" | Sudo -S -k bash /tmp/myscript.sh

Der Nachteil der obigen Methode ist, dass die Befehle, die Sie später im Verlauf ausgeführt haben, nicht vorhanden sind, wenn Sie sie sehen möchten. Eine andere Methode besteht darin, den Sudo-Cache für Anmeldeinformationen für die Authentifizierung zu aktualisieren (standardmäßig ist eine Zeitüberschreitung von 5 Minuten aktiviert) und Sudo dann separat auszuführen. Der Nachteil dabei ist jedoch, dass Sie sich des 5-Minuten-Cache bewusst sein müssen.

Zum Beispiel:

$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
$ echo "<your_password>" | Sudo -S -v
$ Sudo cat /etc/shadow
$ echo "<your_password>" | Sudo -S -v
$ Sudo /tmp/myscript.sh

Hinweis: Ich habe vor jedem Befehl ein Sudo ausgeführt, um sicherzustellen, dass der Sudo-Cache aktualisiert wird, da der Standardwert 5 Minuten beträgt. Ja, whoami sollte nicht 5 Minuten dauern, aber ich nehme an, es könnte genauso gut vor jedem Befehl ausgeführt werden, um die Konsistenz zu gewährleisten. Sie können auch "export HISTIGNORE = ' Sudo -S '" in Ihre ~/.bashrc-Datei einfügen und diese dann mit ". ~/.Bashrc" laden oder sich abmelden und dann anmelden. Ich denke jedoch darüber nach, dies für Skripterstellungszwecke zu verwenden, sodass ich es für optimale Sicherheitspraktiken immer auf dem neuesten Stand halten werde. Das Setzen von "echo" "| Sudo -S -v" auf eine Variable könnte ebenfalls eine gute Idee sein. Führen Sie die Variable dann einfach vor jedem Befehl aus, der Root-Berechtigungen benötigt (siehe Janars Kommentar). Der Kommentar von "John T" sollte auch den Parameter "-k" enthalten, als ob Sie "Sudo-S" ohne "-k" ausführen und der Sudo-Authentifizierungscache bereits über Ihre Anmeldeinformationen verfügt (und weiterhin gültig ist, lautet der Standard-Sudo-Authentifizierungscache 5 Minuten), dann führt bash Ihr Passwort stattdessen als Befehl aus, was schlecht ist.

7
user393365

Sie können dies auch tun:

Sudo -S <<< "password" command
2
Jahid

Beachten Sie, dass die Methode auf einer älteren Version von Sudo, insbesondere "Sudo Version 1.6.7p5", nicht funktioniert:

$ echo "<your_password>" | Sudo -S -k whoami

Wo wie diese Methode funktioniert auf älteren und neuen Versionen Sudo:

$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
2
Darren DeHaven

Wenn Sie mehr Sorgfalt walten lassen möchten, können Sie ein Skript erstellen, die Berechtigungen der Datei ändern, damit nur root sie lesen und bearbeiten und dann einfach ausführen kann.

Beispiel:
1) Erstellen Sie eine Datei:

gedit ~/.easy.install  

2) Fügen Sie dies ein und speichern Sie:

./configure && make && echo <password> | Sudo -S make install && halt  

3) Machen Sie es ausführbar:

Sudo chmod +x ~/.easy.install  

4) Ändern Sie die Berechtigungen der Datei so, dass nur Root sie lesen und bearbeiten kann:

Sudo chmod 700 ~/.easy.install  

5) Führen Sie aus:

~/.easy.install  

Genießen ;-)

2
desgua

Das Einrichten von Sudo auf diese Weise ist gefährlich, wenn jemand sieht, dass Sudo kein Passwort für Ihr Konto benötigt. Wenn Sie nicht wissen, was Sie tun, tun Sie das nicht. Ich hatte es in meinem lokalen A + Training-Programm mit meinem experimentellen Computer ein zu oft ... -_-

Was John T. gesagt hat, hört sich gut an, es besteht jedoch die Gefahr, dass das Kennwort in der Shell-Historie gefunden wird. Was CarlF sagte, klingt besser, aber wenn ein Befehl fehlschlägt, wird der Computer weiterhin mit Superuser-Berechtigungen ausgeführt.

1
TimE.

Das Problem ist gelöst. Zum Beispiel an den Benutzer root:

echo -e 'password\npassword\n' | Sudo passwd root
0

Persönlich mache ich genau das Gleiche wie John T. am 9. November 09 um 2:47, ich habe auch meinen verbessert, gemäß der Anleitung seiner Antwort, danke.

Der Unterschied ist, dass ich normalerweise Variablen benutze, so etwas wie:

AutoSuDo=$" $echo pass | Sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line

Auf diese Weise kann ich leicht meine Variable anstelle von Sudo verwenden,

$AutoSuDo apt-get update;

Das ist bei längeren Skripten sehr praktisch. Ich benutze diese hauptsächlich für PCs anderer, die ich warten muss.

Ich empfehle auch, auf Folgendes zu achten:

  • desgua antworte am 19. April 11 um 23:56 Uhr
  • user224306 comment am 14. Mai 13 um 17:38 für John T reply am 9. November 09 um 2:47
0
Janar