Как я могу ввести пароль в команду sudo на основе подпроцесса? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь выполнить эту команду sudo nmap -sP -n с библиотекой подпроцесса python, моя цель - создать сценарий. Когда я запускаю команду, сценарий считывает пароль из файла, добавляет его в подпроцесс и выполняет команду. Проблема в том, что я всегда должен написать пароль для выполнения команды.

Я пробовал это, но у меня это не сработало.

p = subprocess.Popen(["sudo", "nmap", "-sP", "-n", network], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(bytes("Mypassword", "utf-8"))

Я нашел здесь несколько решений Используйте подпроцесс для отправки пароля , я перепробовал их все, но у меня это не сработало. Есть идеи как решить проблему?

1 Ответ

1 голос
/ 30 апреля 2019

Страница man sudo указывает:

 -S, --stdin
             Write the prompt to the standard error and read the password from the stan‐
             dard input instead of using the terminal device.  The password must be fol‐
             lowed by a newline character.

Запуск следующего кода должен решить вашу проблему:

p = subprocess.Popen(["sudo", "-S", "cmd"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write("password\n")

Очевидно, убедитесь, что вы ввели правильный пароль, иначе он не будетРабота.Кроме того, не забудьте добавить \n в конце.

В качестве альтернативы вы можете запустить nmap как непривилегированный пользователь .Это позволит вам использовать nmap --privileged ..., который не требует пароля.Как указано в ссылке, убедитесь, что вы понимаете проблемы безопасности, чтобы убедиться, что это не проблема для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...