Fabric sudo() 不尊重 env.password

Fabric sudo() not respecting env.password

我正在尝试使用 --initial-password-prompt 预填充 env.password,但远程操作出现了一些奇怪的情况。假设我正在尝试 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') 并在没有 --initial-password-prompt 的情况下调用 fab 从远程传回密码提示,输入密码后,一切正常。

自然地,运行 ssh -t testuser@testserver 'sudo cat /home/user/test.txt' 提示输入密码和 returns 正确的文件内容。我的服务器 shell 配置有问题,还是我使用 sudo() 的方式有问题?

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

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