从 python 脚本 运行 以用户身份更改用户密码

Change user password from python script running as user

我目前正在 CentOs 8 VM 上编写 Python 脚本,我正在尝试编写我的 python 脚本的一部分,它将在没有用户交互的情况下为他们设置用户密码.我还没有找到一种方法来做到这一点,并尝试了各种方法,例如:

subprocess.run(str('echo -e "password\npassword\npassword\n" | sudo -S passwd --stdin user'), shell=True, universal_newlines=True, check=True)

但无济于事。

我知道这是不安全的(即使它有效)但在这种情况下,这真的无关紧要,所以,除了安全性之外,我只需要让它起作用。密码只是显示代码的示例,因为我知道如果将它们用作实际密码,它们将被拒绝。

有没有办法让脚本 运行 成为 root 用户,而不是登录用户?

以 root 用户身份做类似的事情是这样的:

subprocess.run(str('echo -e "password\npassword" | passwd --stdin ' + userName), shell=True, universal_newlines=True, check=True)

只有当我添加sudo部分时我不能自动输入sudo密码

如果我直接从终端执行此操作,它会起作用:

echo -e "password\npassword\npassowrd" | sudo -S passwd --stdin dave

试试看这个 related thread

选项-1

username = 'dave'
sudoPassword = 'mypass'
command = 'passwd --stdin ' + username
p = os.system('echo -e "password\npassword\npassowrd" %s|sudo -S %s' % (sudoPassword, command))

尝试使用 subprocess.Popen(command, 0, None, None, shell=True),如下所示:

def launchCommand(command):
    proc = subprocess.Popen(command,0,None,None, shell=True)
    proc.poll()
    proc.wait()
    ret = proc.returncode
    return ret

command = str('echo -e "password\npassword\npassword\n" | sudo -S passwd --stdin user')
print(launchCommand(command))