Fabric sudo()不尊重env.password

时间:2015-05-02 19:40:27

标签: python sudo fabric

我正在尝试使用env.password预先填充--initial-password-prompt,但是偏远正在甩掉一些陌生感。假设我正在尝试cat一个root拥有的文件作为testuser,对该文件具有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')并在没有fab的情况下调用--initial-password-prompt从远程传回密码提示,输入密码后,一切正常。

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

在线下,我可能会设置一个没有密码sudo和限制命令的部署用户。这可能会解决这个问题,但如果可能的话,我想把它弄清楚。我正在运行Ubuntu 14.10 VPS,以防相关。

1 个答案:

答案 0 :(得分:1)

哦,我的错。我愚蠢地将env.sudo_user设置为我的部署用户testuser,认为它是在远程指定调用用户。事实上,它正在指定目标用户,我试图sudo进入我自己。糟糕。