Fabric sudo() not respecting env.password



我正在尝试使用--initial-password-prompt预填充env.password,但远程正在抛出一些奇怪之处。假设我正在尝试以测试用户的身份catroot拥有的文件,该文件具有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一起使用,以查看这是否是伪终端的问题,但无济于事。

这是奇怪的部分:在没有--initial-password-prompt的情况下调用run('sudo cat /home/testuser/test.txt')并调用fab,并从远程传回密码提示,并且在输入密码时,一切正常。

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

接下来,我可能会设置一个使用无密码sudo和受限命令的部署用户。这可能会使这个问题变得毫无意义,但如果可能的话,我想弄清楚这个问题。我正在运行一个 Ubuntu 14.10 VPS,以防万一。

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

最新更新