Есть два основных способа сделать это -
Один из них вызывает инструмент командной строки passwd из python (например, с помощью модуля подпроцесса stdlib). Если ваш сценарий не запускается от имени пользователя root, вам нужно выполнить перенос с помощью команд «su» или «sudo», чтобы повысить привилегию пользователя root. Запись ожидаемых данных в stdin должна быть достаточной, но если вы обнаружите, что вам нужно выполнить различные действия, в зависимости от того, что именно подсказывает sudo / passwd, модуль pexpect может быть полезен.
Второй - запись непосредственно в файл / etc / shadow , в котором хранятся хэши паролей. определенно потребует, чтобы ваш скрипт запускался от имени пользователя root, чтобы иметь права на чтение / запись в / etc / shadow. Stdlib предлагает модуль spwd для доступа к / etc / shadow, но он доступен только для чтения, поэтому вам придется свернуть свой собственный читатель / писатель ... модуль csv может быть полезно, / etc / shadow близко к файлу csv с разделителем ":", но с некоторыми небольшими отличиями.
Если вы выберете второй маршрут, вам нужно будет сгенерировать новые хэши заменяющего пароля и вставить их в теневой файл. Самый быстрый способ в Linux - использовать модуль stdlib crypt , но вам нужно позаботиться о генерации соли и установке соответствующего префикса хэша пароля ("$ 5 $", "$ 6 $" и т. Д.) , С другой стороны, объект host_context в библиотеке Passlib может позаботиться о большей части этого за вас (отказ от ответственности: я являюсь автором этой библиотеки).
В общем, я бы порекомендовал первый маршрут, если это возможно - изменение / etc / shadow напрямую сопряжено с опасностью - если вы испортите файл / etc / shadow, вы не сможете войти в систему. иди по этому пути, много архивируй файл .