pwn*_*uce 5 python sudo fabric
我想知道函数sudo()和函数有什么区别run('sudo -u user smth')
在文档上有:
sudo 在所有运行方式上都是相同的,除了它总是将给定的命令包装在对 sudo 程序的调用中以提供超级用户权限。
但是有几次,sudo('cmd')提示我输入密码,但如果我切换run('sudo cmd')它,则不会提示任何内容。两者之间有什么变化吗?(我记得 SO 上有人这么说,sudo而且run(sudo cmd)用途不同,但我找不到了)
小智 5
我发现这两个区别。
首先,当使用 sudo() 时,fabric 会从缓存中获取密码,然后就不需要输入密码了。但如果您使用 run('sudo cmd'),则需要输入每个 'sudo cmd' 的密码。
其次,如果你想在其他用户组(例如www)下执行命令而不是root下,则只需设置env.sudo_user = 'www'或sudo('cmd', user='www')。第一个将在 www 下执行每个 sudo(),第二个将在 www 下执行这个单个 cmd。但是当使用 run() 命令时,您需要编辑 run("sudo -u 'www' cmd") 。
from fabric.api import sudo, run, env
env.hosts = ['host_ip',]
env.user = 'user_name'
env.sudo_user = 'sudo_user'
def test_1():
run('sudo pwd')
def test_2():
sudo('pwd')
$ fab -I --show=debug test_1 test_2
Initial value for env.password: # enter password
Commands to run: test_1, test_2
Parallel tasks now using pool size of 1
[ip_address] Executing task 'test_1'
[ip_address] run: /bin/bash -l -c "sudo pwd"
[ip_address] out: [sudo] password for billy: # needs to enter password here
[ip_address] out: /home/billy
[ip_address] out:
Parallel tasks now using pool size of 1
[ip_address] Executing task 'test_2'
[ip_address] sudo: sudo -S -p 'sudo password:' -u "root" /bin/bash -l -c "pwd"
[ip_address] out: sudo password: # only prompt, do not need enter password
[ip_address] out: /home/billy
[ip_address] out:
Done.
Disconnecting from ip_address... done.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4521 次 |
| 最近记录: |