当前位置:  开发笔记 > 编程语言 > 正文

通过Python/Fabric从命令行更改Unix密码

如何解决《通过Python/Fabric从命令行更改Unix密码》经验,为你挑选了3个好方法。

我想用一种方法在Ubuntu 10.4带有结构的远程盒子上更新我的密码.

我希望我fabfile.py看起来像这样:

def update_password(old_pw, new_pw):
    # Connects over ssh with a public key authentication
    run("some_passwd_cmd --old %s --new %s" % (old_pw, new_pd))

不幸的是,我所知道的唯一一个命令让一个人更改密码passwd,而在Ubuntu 10.4上似乎没有任何方法可以传递新的(或旧的)密码作为参数passwd.

可以使用什么命令来更改Ubuntu 10.4上的用户密码fabric

编辑:我已经看过了usermod -p,这可能会有效,但手册页不建议这样做.

编辑:由于某种原因usermod -p,无法在面料上工作.

同样,我尝试了一个(有点不安全)mikej的答案,确实解决了这个问题:

# connecting & running as root.
from fabric.api import *
from fabric.contrib import files

files.append("%s\n%s" % (passwd, passwd), '.pw.tmp')
# .pw.tmp:
# PASSWD
# PASSWD

run("passwd %s < .pw.tmp" % user)

run("rm .pw.tmp")

这不是一个非常优雅的解决方案,但它的工作原理.

谢谢你的阅读.

布赖恩



1> mikej..:

您可以passwd使用echo例如提供新密码和旧密码

echo -e "oldpass\\nnewpass\\nnewpass" | passwd

(-e用于echo解释反斜杠转义的选项,以便将换行符解释为此类)



2> Roshambo..:

诀窍是使用usermod和Python的组合crypt来更改密码:

from crypt import crypt
from getpass import getpass
from fabric.api import *

def change_password(user):
    password = getpass('Enter a new password for user %s:' % user)
    crypted_password = crypt(password, 'salt')
    sudo('usermod --password %s %s' % (crypted_password, user), pty=False)



3> Christian Lo..:

我在Ubuntu 11.04上使用chpasswd

fabric.api.sudo('echo %s:%s | chpasswd' % (user, pass))

注意:通常此模式不起作用:

$ sudo echo bla | restricted_command

因为只有'echo'获得了提升权限,而不是'restricted_command'.

但是,这里有效,因为当fabric.api.sudo使用shell = True(默认值)进行caled时,fabric会像这样组装命令:

$ sudo -S -p  /bin/bash -l -c ""

sudo生成一个新的shell(/ bin/bash),以root权限运行,然后该升级的shell运行该命令.

使用sudo管道的另一种方法是使用sudo tee:

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有