Как использовать подпроцесс для запросов оболочки anwser? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать базовый скрипт на python, чтобы изменить пароль пользователя на сохраненную переменную с помощью подпроцесса. Как только я нигде не могу найти нигде, который объясняет, как заставить его общаться с подсказками, он только отправляет команды.Вот основная схема того, что я пытаюсь выполнить

import subprocess
import os
pass = root
user = FakeUser

subprocess.call(['sudo passwd', user], shell=True)

Затем он запрашивает новый пароль Unix:

subprocess.call([pass], shell=True)

Затем он запрашивает его снова:

subprocess.call([pass], shell=True)

Надеюсь, это имеет смысл.Мне просто нужен код для связи с терминалом, а не просто для отправки команд.

1 Ответ

0 голосов
/ 27 сентября 2018

Для этого вы можете использовать модуль pexpect .passwd будет печатать слово password на каждой интерактивной строке (оно может быть написано заглавными буквами, в зависимости от вашей системы), поэтому подход, который я здесь использую, просто предусматривает pexpect ожидание печати интерактивного приглашения перед отправкойследующая строкаpasswd обычно запрашивает старый пароль один раз и новый пароль дважды.

Примерно так должно работать:

import pexpect

def change_password(username, sudo_password, new_password):
  process = pexpect.spawn("sudo passwd " + username)
  process.expect("password")
  process.sendline(sudo_password)
  process.expect("password")
  process.sendline(new_password)
  process.expect("password")
  process.sendline(new_password)
  process.close()

username = "FakeUser"
sudo_password = "sudopass"
new_password = "new"

change_password(username, sudo_password, new_password)

Обновление: поскольку вы используете sudo, вы будетесначала спросите ваш пароль sudo, а затем вам будет разрешено установить пароль для произвольного пользователя без необходимости знать его оригинальный пароль.Я переименовал переменные, чтобы отразить это.Если вы хотите сделать это из учетной записи пользователя без прав sudo, вы все равно можете сделать это, но сначала вам нужно будет переключить пользователей (и, вероятно, откажитесь от использования sudo, что не получится для непривилегированного пользователя).

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