使用fabric更改默认的postgres用户密码

时间:2012-06-20 22:03:12

标签: python fabric

我正在尝试为postgresql设置python fabric,但无法弄清楚如何在提示符下输入新密码。如何在结构中设置以下内容:

sudo passwd –d postgres
sudo su postgres –c passwd

1 个答案:

答案 0 :(得分:1)

解决方案1:

从安全角度来看,我在这里写的是一个糟糕的黑客。 它在命令行上提供密码,因此除了玩具工作之外不应该使用它:

with hide('running', 'stdout', 'stderr'):
    run('echo -e "%s\n%s\n" | sudo passwd %s' % (passwd, passwd, user))

PS:此解决方案使用较旧的格式化技术。这不应该让你不喜欢使用新的。

解决方案2:

Passwd期望从stdin输入,你可以改为使用pexpect / expect来专门做这项工作,并且比上面的方法更好,但不是没有它的缺陷。

样本pexpect程序:

child = pexpect.spawn('some command that expects password')
child.expect('Enter password:')  
child.sendline('somepassword')
child.expect('Enter password:')  --- passwd may ask twice
child.sendline('somepassword')
child.expect(pexpect.EOF, timeout=None)
...