Jav*_* C. 5 python linux authentication
我正在尝试用Python编写一些脚本,偶然发现需要在Linux系统中更新给定用户的密码......
更新:目标是实现脚本从给定的数据/算法自动更新密码.重要的是没有人为干预......
有没有办法实现这一目标?或者我应该通过其他方式搜索?
谢谢!
你可以使用openssl
和usermod
:
#!/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)
您可以使用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测试了这个.
归档时间: |
|
查看次数: |
7573 次 |
最近记录: |