以root身份运行结构脚本

Mar*_*rin 5 python sudo su fabric

我正在尝试使用fabric来自动执行我在几台服务器上执行的一些管理工作.一般流程如下:

  1. SSH与本地用户
  2. 运行:sudo su -成为root(再次提供本地用户密码)
  3. 以root完成工作:)

不幸的是,使用run('sudo su -')块执行脚本并允许用户输入.当我键入exitCtrl+Dscipt恢复,但没有root权限.

在Fabric切换用户时遇到了类似的问题,但我受限制,sudo su -因为我不允许更改/etc/sudoers包含以下行的文件:

localuser ALL = /usr/bin/su -

我浏览了织物的来源,试图找到一种解决方法,但没有成功.

小智 2

您的问题有多种解决方案。首先,您想使用 运行命令sudo。您可以使用 Fabric 方法sudo来代替runruns a shell command on a remote host, with superuser privilegessudo ref)。

例如,这些命令是使用以下命令执行的sudo

sudo("~/install_script.py")
sudo("mkdir /var/www/new_docroot", user="www-data")
sudo("ls /home/jdoe", user=1001)
result = sudo("ls /tmp/")
Run Code Online (Sandbox Code Playgroud)

另一个想法是您想要包装一组命令(需要编辑sudo)。您可以使用 Fabric 上下文管理器 ( ref ) 来执行此操作。特别是,您可以使用prefixsettings

例如:

with settings(user='root'):
    run('do something')
    run('do another thing')
Run Code Online (Sandbox Code Playgroud)

会询问您 root 密码,然后以 root 身份执行命令。您可以调整设置来存储密码。