我想知道函数之间有什么区别sudo()
和函数run('sudo -u user smth')
文档上有:
sudo 在所有运行方式上都是相同的,除了它总是换行
调用 sudo 程序中的给定命令以提供超级用户
特权。
但有几次,sudo('cmd')
提示我输入密码,但如果我切换run('sudo cmd')
它的工作原理没有提示我任何东西。两者之间有什么改变吗? (我记得SO上有人说过sudo
and run(sudo cmd)
用途不同,但我找不到它)
我发现这两个区别。
1: Fabric 维护内存中的密码 http://docs.fabfile.org/en/latest/usage/execution.html#password-management
2: sudo 接受额外的用户和组参数 http://docs.fabfile.org/en/latest/api/core/operations.html#fabric.operations.sudo
首先,当使用 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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)