2009-11-09 02:37:00 +0000 2009-11-09 02:37:00 +0000
123
123

sudo met wachtwoord in één opdrachtregel?

Op drukke dagen wil ik $ ./configure && make && sudo make install && halt

‘s nachts laten draaien en naar bed gaan, in de hoop dat de applicatie automatisch wordt geïnstalleerd. Maar wat ik de volgende dag zie is het scherm waar sudo me om het wachtwoord vraagt. Dus hoe kan ik sudo met een wachtwoord in één opdrachtregel draaien, of is er een andere methode om dit te doen?

Antwoorden (11)

185
185
185
2009-11-09 02:47:20 +0000

Ja, gebruik de -S-schakelaar die het wachtwoord van STDIN leest:

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

Dus voor uw geval zou het er als volgt uitzien:

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

natuurlijk, vervang <password> door uw wachtwoord.

11
11
11
2009-11-09 03:03:22 +0000

U kunt ook sudo configureren met visudo zodat u de gebruiker kan gebruiken als sudo zonder wachtwoord.

User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS
10
10
10
2012-08-08 06:52:50 +0000

Verschillende van de andere oplossingen hebben het nadeel dat ze onnodig ./configure en make als root draaien.

Dit is een beetje ingewikkeld, maar het zou moeten werken:

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

Let op het gebruik van dubbele aanhalingstekens om $USER uit te breiden met de (niet-wortel) schil.

Ik zou ook een sleep 60 kunnen toevoegen voor het halt commando. Ik heb soms dit soort dingen gedaan, waarbij ik verwachtte dat het commando lang zou lopen, maar er gaat iets mis en het eindigt onmiddellijk; de sleep laat me het commando uitschakelen voordat het systeem wordt afgesloten. Of je kunt shutdown gebruiken met een tijdsargument.

10
10
10
2009-11-09 03:14:31 +0000

U zou uw opdrachtregel kunnen vervangen door deze:

$sudo su

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

U wordt onmiddellijk om uw wachtwoord gevraagd, waarna de rest van de opdrachten als superuser wordt uitgevoerd.

9
9
9
2014-11-25 19:43:17 +0000

Impostare HISTIGNORE su “sudo -S

$ export HISTIGNORE='*sudo -S*'

e poi passare la password in modo sicuro a sudo:

$ echo "your_password" | sudo -S -k <command>
``` ```
$ 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

“HISTIGNORE” significa non salvare questo comando nella cronologia. Questa è la cronologia in memoria o il file “~/.bash_history”.

Ad esempio, la seguente procedura consente di passare la password in modo sicuro al comando sudo, senza conservare la cronologia della password.

“-S”, significa utilizzare stdin per la password,

“-k” significa ignorare le credenziali memorizzate nella cache per costringere sudo a chiedere sempre. Questo è per un comportamento coerente.

$ 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
``` &001 

Il lato negativo del metodo di cui sopra è che se volete vedere i comandi che avete eseguito nella cronologia in seguito non ci saranno. Un altro metodo è quello di aggiornare la cache delle credenziali di autenticazione di sudo (il default è abilitato con un timeout di 5 minuti), quindi eseguire il sudo separatamente. Ma il lato negativo di questo è che si dovrà essere consapevoli della cache di 5 minuti. 


Per esempio: 


&001 &001 


Nota Ho eseguito un sudo prima di ogni comando per assicurare che la cache del sudo sia aggiornata, dato che il valore predefinito è di 5 minuti. Sì, whoami non dovrebbe richiedere 5 minuti, ma penso che sia meglio farlo eseguire prima di ogni comando per coerenza. Si potrebbe anche mettere "export HISTIGNORE='_sudo -S_'" nel file ~/.bashrc, poi caricarlo con ". ~/.bashrc" o logoff e poi effettuare il login. Tuttavia, sto pensando di usare questo per scopi di scripting, quindi lo terrò in cima a tutti i miei script per le migliori pratiche di sicurezza. Impostare "echo "" | sudo -S -v" su una variabile invece potrebbe essere una buona idea, poi basta eseguire la variabile prima di ogni comando che necessita di privilegi di root, vedi il commento di Janar. Il commento di "John T" dovrebbe includere anche il parametro "-k", come se si eseguisse "sudo -S" senza "-k" e la cache di autenticazione sudo avesse già le proprie credenziali (ed è ancora valida, la cache di autenticazione sudo di default è di 5 minuti) allora bash eseguirà invece la password come comando, il che è un male.
5
5
5
2015-06-09 14:15:37 +0000

U kunt dit ook doen:

sudo -S <<< "password" command
4
4
4
2014-12-08 15:18:13 +0000

Opmerking, ik heb gemerkt dat deze methode niet werkt op een oudere versie van sudo, in het bijzonder “Sudo versie 1.6.7p5”:

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

Waar als deze methode wel werkt op oudere en nieuwe versies sudo:

$ echo "<your_password>" | sudo -S -v
$ sudo whoami
2
2
2
2011-04-19 23:56:23 +0000

Als u meer zorg wilt dragen, kunt u een script maken, de rechten van het bestand wijzigen zodat alleen root het kan lezen en bewerken en het dan gewoon kan uitvoeren.

Voorbeeld: 1) Maak een bestand aan:

gedit ~/.easy.install

2) Plak dit en sla op:

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

3) Maak het uitvoerbaar:

sudo chmod +x ~/.easy.install

4) Wijzig de rechten van het bestand zodat alleen root het kan lezen en bewerken:

sudo chmod 700 ~/.easy.install

5) Voer uit:

~/.easy.install

Enjoy ;-)

1
1
1
2010-11-10 03:37:15 +0000

Het opzetten van zo'n sudo is gevaarlijk als iemand toevallig ziet dat sudo geen wachtwoord nodig heeft op uw account. Tenzij je weet wat je doet, doe dat dan niet. Ik heb het te vaak laten gebeuren bij mijn lokale A+ Training programma met mijn experimentele computer… -_-

Wat John T. zei klinkt goed, maar er is nog steeds het risico om het wachtwoord te vinden in de shell geschiedenis. Wat CarlF zei klinkt beter, maar als een commando mislukt, zal de computer nog steeds draaien met superuser privileges.

0
0
0
2018-11-08 16:51:03 +0000

Het probleem is opgelost. Bijvoorbeeld, naar de gebruiker root:

echo -e 'password\npassword\n' | sudo passwd root
0
0
0
2014-06-29 20:57:36 +0000

Persoonlijk doe ik hetzelfde als John T op 9 nov ‘09 om 2:47 antwoordde, ik heb de mijne ook verbeterd volgens de richtlijnen van zijn antwoord, bedankt.

Verschil is dat ik de neiging heb om gebruik te maken van variabelen, zoiets als:

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

Op die manier kan ik gemakkelijk mijn variabele gebruiken in plaats van sudo,

$AutoSuDo apt-get update;

Dat komt goed van pas met wat langere scripts. Ik gebruik deze vooral voor personal computers van anderen, die ik moet onderhouden.

Ik raad ook aan om te letten op:

  • desgua antwoord op Apr 19 '11 om 23:56
  • gebruiker224306 commentaar op 14 '13 mei om 17:38 voor John T antwoord op 9 '09 november om 2:47