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

sudo avec mot de passe dans une ligne de commande ?

Les jours de forte affluence, j'aimerais exécuter

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

la nuit et me coucher, en espérant que l'application soit automatiquement installée. Mais ce que je vois le lendemain, c'est l'écran où sudo me demande le mot de passe. Alors comment puis-je lancer sudo avec le mot de passe dans une ligne de commande, ou existe-t-il une autre méthode pour le faire ?

Réponses (11)

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

Oui, utilisez l'interrupteur -S qui lit le mot de passe de STDIN :

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

Donc pour votre cas, cela ressemblerait à ceci :

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

bien sûr, remplacez <password> par votre mot de passe.

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

Vous pouvez également configurer sudo avec visudo pour permettre à votre utilisateur d'utiliser make comme sudo sans mot de passe.

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

Plusieurs des autres solutions ont l'inconvénient de faire tourner inutilement ./configure et make en tant que racine.

C'est un peu compliqué, mais ça devrait fonctionner :

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

Notez l'utilisation de guillemets doubles pour permettre à $USER d'être développé par le shell (non racine).

Je pourrais aussi ajouter un sleep 60 avant la commande halt. J'ai parfois fait des choses comme ça, en m'attendant à ce que la commande fonctionne pendant longtemps, mais quelque chose tourne mal et elle se termine immédiatement ; la commande sleep me permet de tuer la commande avant que le système ne s'arrête. Ou vous pouvez utiliser shutdown avec un argument de temps.

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

Vous pouvez remplacer votre ligne de commande par ceci :

$sudo su

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

Vous serez invité à entrer votre mot de passe immédiatement, puis les autres commandes seront exécutées en tant que super-utilisateur.

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

Réglez HISTIGNORE sur “sudo -S

$ export HISTIGNORE='*sudo -S*'

Puis passez votre mot de passe en toute sécurité à sudo :

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

“HISTIGNORE” signifie de ne pas enregistrer cette commande dans l'historique. C'est l'historique en mémoire ou le fichier “~/.bash_history”.

Par exemple, ce qui suit va transmettre votre mot de passe en toute sécurité à la commande sudo, sans conserver l'historique de votre mot de passe.

“-S”, signifie utiliser stdin pour le mot de passe,

“-k” signifie ignorer les identifiants mis en cache pour forcer sudo à toujours demander. L'inconvénient de la méthode ci-dessus est que si vous voulez voir les commandes que vous avez exécutées dans l'historique plus tard, elles n'y seront pas. Une autre méthode consiste à mettre à jour le cache d'authentification sudo (par défaut, il est activé avec un délai d'attente de 5 minutes), puis à exécuter le sudo séparément. Mais l'inconvénient de cette méthode est que vous devez être conscient de la durée de 5 minutes du cache. Par exemple :

$ 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

Note J'ai lancé un sudo avant chaque commande pour m'assurer que le cache sudo est mis à jour, car la valeur par défaut est de 5 minutes. Oui, whoami ne devrait pas prendre 5 minutes, mais je pense qu'il est préférable de le lancer avant chaque commande pour des raisons de cohérence. Vous pouvez aussi mettre “export HISTIGNORE=‘sudo -S’” dans votre fichier ~/.bashrc, puis le charger avec “. ~/.bashrc” ou vous déconnecter puis vous connecter. Cependant, je pense l'utiliser à des fins de scripting, donc je vais le garder en tête de tous mes scripts pour les meilleures pratiques de sécurité. Définir “echo ” | sudo -S -v" comme une variable pourrait également être une bonne idée, puis lancer la variable avant chaque commande nécessitant les privilèges de root, voir le commentaire de Janar. Le commentaire de “John T” devrait également inclure le paramètre “-k”, car si vous lancez “sudo -S” sans “-k” et que le cache d'authentification sudo a déjà vos informations d'identification (et est toujours valide, le cache d'authentification sudo par défaut est de 5 minutes), alors bash lancera votre mot de passe en tant que commande à la place, ce qui est mauvais.

5
5
5
2015-06-09 14:15:37 +0000

Vous pouvez le faire aussi :

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

Note, j'ai constaté que cette méthode ne fonctionne pas sur une ancienne version de sudo, en particulier “Sudo version 1.6.7p5” :

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

Où comme cette méthode fonctionne sur les anciennes et nouvelles versions sudo :

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

Si vous voulez faire plus attention, vous pouvez créer un script, modifier les permissions du fichier pour que seul root puisse le lire et le modifier, puis l'exécuter. Exemple :

1) Créer un fichier :

gedit ~/.easy.install

2) Coller et sauvegarder :

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

3) Le rendre exécutable :

sudo chmod +x ~/.easy.install

4) Changer les permissions du fichier pour que seul root puisse le lire et l'éditer :

sudo chmod 700 ~/.easy.install

5) Exécuter :

~/.easy.install

Enjoy ;-)

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

Il est dangereux de configurer sudo de cette manière si quelqu'un se rend compte que sudo ne nécessite pas de mot de passe sur votre compte. Ne faites pas cela, à moins que vous ne sachiez ce que vous faites. Cela m'est arrivé une fois de trop dans mon programme local de formation A+ avec mon ordinateur expérimental… -_-

Ce que John T. a dit sonne bien cependant, sauf qu'il y a toujours le risque de trouver le mot de passe dans l'historique du shell. Ce que CarlF a dit sonne mieux, mais si une commande échoue, l'ordinateur fonctionnera toujours avec les privilèges de super-utilisateur.

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

Le problème est résolu. Par exemple, à la racine de l'utilisateur :

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

Personnellement, j'ai fait la même chose que John T. a répondu le 9 novembre 2009 à 2:47, j'ai aussi amélioré la mienne en suivant les indications de sa réponse, merci.

La différence est que j'ai tendance à utiliser des variables, quelque chose comme :

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

De cette façon, je peux facilement utiliser ma variable au lieu de sudo,

$AutoSuDo apt-get update;

C'est assez pratique avec des scripts plus longs. Je les utilise principalement pour les ordinateurs personnels des autres, que je dois entretenir.

Je recommande également de faire attention à :

  • desgua réponse le 19 avril ‘11 à 23:56
  • user224306 commentaire le 14 mai '13 à 17:38 pour John T réponse le 9 novembre '09 à 2:47