Мне просто нужно было сделать это снова сегодня, и ниже мое решение. Он полностью автоматический, а также использует стандартный двоичный файл системного пароля, поэтому соблюдаются системные политики.
#!/usr/bin/python3
username = 'joe'
# generate passphrase
pw_length = 6
phrase = subprocess.check_output(['pwgen', str(pw_length), '1'])
phrase = phrase.decode('utf-8').strip()
dev_null = open('/dev/null', 'w')
passwd = subprocess.Popen(['sudo', 'passwd', user], stdin=subprocess.PIPE,
stdout=dev_null.fileno(),
stderr=subprocess.STDOUT)
passwd.communicate( ((phrase + '\n')*2).encode('utf-8') )
if passwd.returncode != 0:
raise OSError('password setting failed')
(Это также сгенерировало пароль. Пропустите первую часть, если не полезно.)