Linux ユーザーのパスワードを Python から変更する際に問題が発生しています。私は非常に多くのことを試しましたが、問題を解決することができませんでした.これは私がすでに試したことのサンプルです:
sudo_password は sudo のパスワード、sudo_command はシステムに実行させるコマンド、user はリストから取得し、パスワードを変更するユーザー、newpass は「ユーザー」に割り当てたいパスです。
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 が返されます。これは理論的には正しく行われたことを意味しますが、これまでのところパスワードは変更されていません。
この問題または類似の問題をインターネットとスタックオーバーフローで検索し、公開されたソリューションを試しましたが、成功しませんでした。
もちろん、さらに情報が必要な場合は、喜んで提供します。
前もって感謝します。