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
进入自己。哎呀
我正在尝试使用 --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
进入自己。哎呀