我正在尝试使用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,以防相关。
答案 0 :(得分:1)
哦,我的错。我愚蠢地将env.sudo_user
设置为我的部署用户testuser,认为它是在远程指定调用用户。事实上,它正在指定目标用户,我试图sudo
进入我自己。糟糕。