我正在尝试为 postgresql 设置 python 结构,但无法弄清楚如何在提示符下输入新密码。你如何在fabric中设置以下内容:
sudo passwd –d postgres
sudo su postgres –c passwd
解决方案1:
从安全的角度来看,我在这里写的是一个糟糕的黑客攻击。它在命令行上提供密码,因此除了玩具工作之外,不应在任何地方使用它:
with hide('running', 'stdout', 'stderr'):
run('echo -e "%s\n%s\n" | sudo passwd %s' % (passwd, passwd, user))
PS:此解决方案使用较旧的格式化技术。这不应该影响您使用较新的。
解决方案2:
Passwd 期望来自标准输入的输入,您可以改为使用 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)
...