【发布时间】:2020-06-09 18:41:02
【问题描述】:
我目前正在 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
【问题讨论】:
-
我执行了你的代码
echo -e "password\npassword\npassowrd" | sudo -S passwd --stdin dave。它抛出一个错误:passwd: unrecognized option '--stdin'。请提供正确的命令。 -
如果我运行它的命令它工作:'[dave@localhost ~]$ echo -e "password\npassword\npassword" | sudo -S passwd --stdin dave [sudo] dave 的密码:更改用户 dave 的密码。 passwd:所有认证令牌更新成功。 [dave@localhost ~]$'
-
如果你能运行它,那么试试
subprocess.Popen(command, 0,None, None, shell=True) -
不行还是不行,我明天再去拿。无论如何,谢谢。