web-dev-qa-db-fra.com

Comment exécuter une commande demandant un mot de passe en arrière-plan?

Je veux exécuter une commande Sudo apt-get update &. Cependant, après avoir appuyé sur entrée, lorsque je frappe pour jobs, il affiche l'état de ces commandes comme étant arrêté. Je suppose qu'en plaçant le processus en arrière-plan, je ne lui ai pas donné l'occasion de demander un mot de passe. Existe-t-il un moyen d'exécuter en arrière-plan un processus nécessitant un mot de passe?

5
bubble

Essayez de taper Sudo -i première fin puis apt-get update & ou tout simplement en exécutant la commande:

Sudo -i && apt-get update &

Vous pouvez également essayer la commande suivante:

gksudo && Sudo apt-get update &

Mais je ne suis pas sûr que ça va marcher.

Vous pouvez également essayer d'ajouter votre utilisateur à la liste des utilisateurs qui ne sont pas obligés de saisir un mot de passe pour utiliser Sudo.

Pour ce faire, tapez Sudo visudo dans le terminal. Puis ajoutez la ligne

%super_sudoers ALL=(ALL) NOPASSWD: ALL

Ou ce que vous voulez appeler le groupe (vous pouvez changer de "super_sudoers") puis ajoutez votre utilisateur à ce groupe en tapant

usermod -a -G super_sudoers yourusername (remplacer évidemment votre nom d'utilisateur par votre nom d'utilisateur)

et redémarrez (ou peut-être déconnectez/connectez-vous fonctionne, pas sûr) pour trouver vous pouvez taper des commandes suo sans avoir besoin d'entrer un mot de passe. Bien entendu, cela signifie que d’autres personnes peuvent s’assurer que vous laissez toujours votre ordinateur verrouillé et que la connexion automatique n’est pas activée.

2
Jamie Twells

Tout d'abord, "Ce n'est pas la meilleure pratique".
Mais vous pouvez utiliser la commande Sudo -S

Sudo -S:
L'option -S (stdin) amène Sudo à lire le mot de passe depuis l'entrée standard au lieu du terminal.

Alors, allez au terminal et tapez:

echo 'yourpassword' | Sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &

il lancera la commande apt-get update sans demander un mot de passe et un arrière-plan,
et redirige (ajoute) le stdout et le stderr vers un fichier journal de votre maison nommé myaptupd.log , juste au cas où vous peut vérifier si tout va bien avec la commande apt-get update.

Faites ceci est une grosse commande, vous pouvez la mettre comme un alias dans votre fichier .bashrc. Par exemple: dans le type de terminal:

gedit /home/user/.bashrc

Ajouter cette ligne à la fin du fichier

alias myaptupd='echo 'yourpassword' | Sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &'

Rechargez votre .bashrc
Dans le terminal, allez dans votre répertoire personnel et tapez:

cd

Puis tapez:

source .bashrc

ou

. .bashrc

Maintenant, dans le terminal, tapez simplement l'alias en tant que commande:

myaptupd

Vous pouvez vérifier avec la commande jobs le statut.

D'autre part, vous pouvez créer un script bash nommé myaptupd.sh
Par exemple:

#! /bin/bash
echo 'yourpassword' | Sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &

Pour des raisons de sécurité, vous pouvez définir les permanentes sur:

chmod 700 /path/to/the/myaptupd.sh

Ensuite, vous pouvez appeler le script avec:

 bash /path/to/the/myaptupd.sh

Ou créez un alias dans votre .bashrc

alias myaptupd='bash /path/to/the/myaptupd.sh'

Rechargez votre fichier .bashrc (comme expliqué précédemment) et vous pourrez taper le nom de l'alias pour exécuter le script:

myaptupd

J'espère que cela vous aidera!

Cordialement.

2
Roman Raguet

Le meilleur moyen sécurisé est:

su -c "Sudo apt-get update &"

Vous pouvez également diriger la sortie vers un fichier journal:

su -c "Sudo apt-get update > update.log &"
1
Doomineer

J'ai ajouté ce qui suit à mon fichier .bash_profile.

sudobg() {
  Sudo echo "Password entered"
  Sudo $@ &
}

Ensuite, je peux simplement appeler:

Prompt$ sudobg echo "Hello from the background."

Et je reçois:

Password:
Password entered
[1] 6773
Prompt$ Hello from the background.

Disclaimer: J'utilise bash mais pas Ubuntu. Il peut y avoir de meilleurs emplacements pour cette définition de fonction.

0
Peter Westmacott

Essayer:

xterm -e "Sudo -b Nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"

quand vous fermez xterm, le serveur web php toujours en vie,

Ne mettez pas "Nohup" avant "Sudo" sinon le serveur web php sera tué après la fermeture de xterm.

0
diyism