有没有办法在Python中编写脚本来更改Linux中的用户密码?如果是这样,怎么样?

Jav*_* C. 5 python linux authentication

我正在尝试用Python编写一些脚本,偶然发现需要在Linux系统中更新给定用户的密码......

更新:目标是实现脚本从给定的数据/算法自动更新密码.重要的是没有人为干预......

有没有办法实现这一目标?或者我应该通过其他方式搜索?

谢谢!

Jul*_*era 8

你可以使用opensslusermod:

#!/usr/bin/env python
import subprocess

login = 'username'
password = 'somepassword'

# OpenSSL doesn't support stronger hash functions, mkpasswd is preferred
#p = subprocess.Popen(('openssl', 'passwd', '-1', password), stdout=subprocess.PIPE)
p = subprocess.Popen(('mkpasswd', '-m', 'sha-512', password), stdout=subprocess.PIPE)
shadow_password = p.communicate()[0].strip()

if p.returncode != 0:
    print 'Error creating hash for ' + login

r = subprocess.call(('usermod', '-p', shadow_password, login))

if r != 0:
    print 'Error changing password for ' + login
Run Code Online (Sandbox Code Playgroud)


Fil*_*ina 5

您可以使用crypt来进行密码散列而不是使用openssl passwd(在命令行中以明文形式传递密码的地方)

适应Juliusz脚本:

#!/usr/bin/env python
import subprocess,crypt,random

login = 'username'
password = 'somepassword'

ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
salt = ''.join(random.choice(ALPHABET) for i in range(8))

shadow_password = crypt.crypt(password,'$1$'+salt+'$')

r = subprocess.call(('usermod', '-p', shadow_password, login))

if r != 0:
    print 'Error changing password for ' + login
Run Code Online (Sandbox Code Playgroud)

这样,密码只在已经散列(to usermod)的命令行中传递.
我用ubuntu + python2.6.6 + pycrypto2.5测试了这个.