Для этого вы можете использовать модуль 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
, что не получится для непривилегированного пользователя).