从 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))
我目前正在 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))