Как запускать команды sudo в shell / linux с помощью скрипта Python - PullRequest
0 голосов
/ 03 июля 2019

Как запустить sudo bash с использованием скрипта Python

import subprocess
import os

sudoPassword2 = 'abcd1234'
command2 = 'sudo bash'
p2 = os.system('echo %s|sudo -S %s' % (sudoPassword2, command2))

Я получаю эту ошибку:

bash: line 1: abcd1234: command not found

, когда я пытался это сделать, также выдает ошибку

import shlex
import subprocess


command1 = shlex.split('cd /home/backups')
subprocess.call(command1)

ошибка cd нет файла или dir

пробовал также это:

import shlex
import subprocess



subprocess.call(["cd","/home","/backups"])

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы получаете эту ошибку, потому что ваша команда сначала отправляет пароль клиенту cli без запроса его. Поэтому bash будет интерпретировать ее как команду, которая, очевидно, не может быть выполнена.

Лучше сделать os.system('sudo command') и вызвать скрипт как root или через sudo. Это обеспечит наличие необходимых привилегий в скрипте сразу во время выполнения.

Еще одна причина, по которой вы определенно хотите воздерживаться от того, что вы делаете, - это необходимость иметь пароль sudo для вашей машины, записанный в сценарий в виде простого текста. Никогда не делай этого. Это зло.

Если нет другого пути, вы можете заставить sudo выполнить команду без запроса пароля, добавив директивы NOPASSWD к /etc/sudoers с помощью редактора visudo (никогда не используйте ничего другого), например:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Но если вы уверены, что знаете, что это открывает выполнение этой команды для любого пользователя в системе без повышенных прав. Это может быть огромной угрозой безопасности.

0 голосов
/ 03 июля 2019

Вы можете использовать модуль os

import os

os.system("sudo and the code you want to run")

в примере:

import os

os.system("sudo apt-get vlc")
...