Fabric的sudo()命令不遵循env.password属性

3

我正在尝试使用--initial-password-prompt预填充env.password,但远程服务器返回了一些奇怪的东西。假设我正在以testuser的身份cat一个根用户拥有、文件权限为600的文件。我调用sudo('cat /home/testuser/test.txt'),并得到以下反馈:

[testuser@testserver] sudo: cat /home/testuser/test.txt
[testuser@testserver] out: cat: /home/testuser/test.txt: Permission denied
[testuser@testserver] out:
Fatal error: sudo() received nonzero return code 1 while executing!
Requested: cat /home/testuser/test.txt
Executed: sudo -S -p 'sudo password:'  -u "testuser"  /bin/bash -l -c "cat /home/testuser/test.txt"

这个命令是将提示符输入回到输入中吗?我尝试使用sudo()pty=False看看是否与伪终端有关,但没有成功。

奇怪的是:调用run('sudo cat /home/testuser/test.txt')并在不使用--initial-password-prompt的情况下调用fab会从远程传回密码提示符,输入密码后一切正常。

当然,运行ssh -t testuser@testserver 'sudo cat /home/user/test.txt'会提示输入密码,并正确返回文件内容。我的服务器shell配置有问题吗,还是我使用sudo()时出了问题?

最终,我可能会设置一个无需密码的部署用户和受限命令的sudo。如果可能的话,我想解决这个问题。我正在运行Ubuntu 14.10 VPS,如果有关的话。

1个回答

1

哦,我的错误。我愚蠢地将env.sudo_user设置为我的部署用户testuser,认为它指定了远程调用用户。实际上,它指定了目标用户,而我正在尝试对自己进行sudo。糟糕。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接