我在使用Python修改Linux用户密码时遇到了问题。我尝试了很多方法,但是都无法解决问题,以下是我已经尝试过的样例:
sudo_password是sudo的密码,sudo_command是我想要系统运行的命令,user是从列表中获取的要更改密码的用户,并且newpass是我想要分配给“user”的密码。
user = list.get(ANCHOR)
sudo_command = 'passwd'
f = open("passwordusu.tmp", "w")
f.write("%s\n%s" % (newpass, newpass))
f.close()
A=os.system('echo -e %s|sudo -S %s < %s %s' % (sudo_password, sudo_command,'passwordusu.tmp', user))
print A
windowpass.destroy()
'A'是os.system执行的返回值,在这种情况下为256。我也尝试过。
A=os.system('echo %s|sudo -S %s < %s %s' % (sudo_password, sudo_command,'passwordusu.tmp', user))
但它返回相同的错误代码。我尝试了几种使用“passwd”命令的其他方法,但没有成功。使用“chpasswd”命令,我尝试了这个:
user = list.get(ANCHOR)
sudo_command = 'chpasswd'
f = open("passwordusu.tmp", "w")
f.write("%s:%s" % (user, newpass))
f.close()
A=os.system('echo %s|sudo -S %s < %s %s' % (sudo_password, sudo_command,'passwordusu.tmp', user))
print A
windowpass.destroy()
还包括:
A=os.system('echo %s|sudo -S %s:%s|%s' % (sudo_password, user, newpass, sudo_command))
@;which returns 32512
A=os.system("echo %s | sudo -S %s < \"%s\"" % (sudo_password, sudo_command, "passwordusu.tmp"))
@;which returns 256
我也尝试使用'mkpasswd'和'usermod',就像这样:
user = list.get(ANCHOR)
sudo_command = 'mkpasswd -m sha-512'
os.system("echo %s | sudo -S %s %s > passwd.tmp" % (sudo_password,sudo_command, newpass))
sudo_command="usermod -p"
f = open('passwd.tmp', 'r')
for line in f.readlines():
newpassencryp=line
f.close()
A=os.system("echo %s | sudo -S %s %s %s" % (sudo_password, sudo_command, newpassencryp, user))
@;which returns 32512
但是,如果你前往https://www.mkpasswd.net,对'newpass'进行哈希并替换为'newpassencryp',它会返回0,理论上意味着它已经正确执行,但到目前为止它并没有改变密码。
我在互联网和stackoverflow上搜索了这个问题或类似的问题,并尝试了所提出的解决方案,但是仍然没有成功。
我非常感谢任何帮助,当然,如果您需要更多信息,我会乐意提供!
提前致谢。
passwd
和sudo
不会从标准输入读取密码,而是从/dev/tty
读取。你需要使用伪终端来欺骗它们;pexpect
在这方面做得很好。 - Fred Foo