Как я могу запустить команду в скрипте python от имени root?

#python-3.x #command-line #tcp #nmap

Вопрос:

У меня есть скрипт на python для сканирования TCP. Я использую библиотеку python3_nmap, поэтому команда выглядит следующим образом:

 import nmap3
nmap.nmap_syn_scan(self.ip ,"-p 443 -v -T4")
 

Каждый раз, когда мне нужно вводить свой пароль, как я могу изменить код, чтобы он не запрашивал у меня пароль?

  • Мне не нужно изменять привилегии всего скрипта python, потому что я просто вызываю функцию внутри него в рамках робота, поэтому я должен каким-то образом игнорировать ввод пароля для этого особого подпроцесса!

Комментарии:

1. с помощью чего вы запускаете свой скрипт на Python sudo ?

2. @JanWilamowski Нет. каким-то образом мне нужно сделать это в сценарии, потому что я собираюсь запустить этот сценарий в рамках робота. Я не хочу вводить пароль.

Ответ №1:

Здесь вам нужна некоторая автоматизация. Pexpect — хороший выбор. Вы должны запустить свой скрипт python с соответствующими правами. Предоставление разрешения на выполнение может быть автоматизировано следующим образом:

 import pexpect
child = pexpect.spawn('sudo python <path_to_your_python_script>')  # make sure about environment
child.expect('password')  # wait to read password string in terminal
child.sendline('<your_password_here>')  # enter user password
 

Комментарии:

1. На самом деле мне не нужно запускать весь скрипт python, я вызову внутри него функцию, и эта функция выполняет некоторые подпроцессы, для которых необходимо ввести пароль, например, при сканировании TCP.

2. Вы имеете в виду, что есть модуль для сканирования, и вы хотите импортировать и вызывать некоторые конкретные процедуры из этого модуля в своем сценарии в качестве корневого. я прав? Как вызывается ваш скрипт?

3. ОК. У меня есть скрипт на python с различными методами внутри него, один из них выполняет сканирование tcp с помощью функции из библиотеки nmap3, для которой требуется привилегия root, с другой стороны, у меня есть файл робота, который вызывает этот метод. поэтому, когда я запускаю файл робота, он просит ввести пароль из-за этого сканирования tcp.