以 root 身份运行结构脚本

     2023-04-18     56

关键词:

【中文标题】以 root 身份运行结构脚本【英文标题】:Running fabric scripts as root 【发布时间】:2013-02-13 08:31:48 【问题描述】:

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

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

不幸的是,使用run('sudo su -') 会阻止脚本的执行并允许用户输入。当我输入 exitCtrl+D 时,scipt 恢复,但没有 root 权限。

我在Switching user in Fabric 中看到了类似的问题,但我仅限于sudo su -,因为我不允许更改包含以下行的/etc/sudoers 文件:

localuser ALL = /usr/bin/su -

我浏览了 fabric 的来源,试图找到解决方法,但没有成功。

【问题讨论】:

看看docs.fabfile.org/en/1.4.2/usage/env.html#sudo-prefix 和这个例子:***.com/questions/12641514/… 使用sudo_prefix='su - -c ' 如该帖子所述需要root密码。如果我使用sudo_prefix='sudo su - -c ',我会收到此错误消息Sorry, user localuser is not allowed to execute '/usr/bin/su - -c /bin/bash -l -c pwd' as root on hostname. 设置shell=False似乎没有效果。设置pty=False 返回错误sudo: no tty present and no askpass program specified 【参考方案1】:

遇到了和你一样的问题,(管理员只允许sudo su - user,不允许sudo -u user -c cmd),这是我使用fabric的工作解决方案:

from ilogue.fexpect import expect, expecting, run 

def sudosu(user, cmd):
    cmd += ' ;exit'
    prompts = []
    prompts += expect('bash', cmd)
    prompts += expect('assword:', env.password)

    with expecting(prompts):
        run('sudo su - ' + user)

def host_type():
    sudosu('root', 'uname -s')

【讨论】:

这看起来是一个不错的解决方案,但它需要 python 在远程机器上。【参考方案2】:

您的问题有多种解决方案。首先,您想使用sudo 运行命令。你可以使用fabric方法sudo代替run那个runs a shell command on a remote host, with superuser privileges(sudo 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/")

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

例如:

with settings(user='root'):
    run('do something')
    run('do another thing')

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

【讨论】:

这两种解决方案都不适合我。我尝试了第一个,sudo('pwd') 转换为sudo -S -p 'sudo password:' /bin/bash -l -c "pwd",我收到一条错误消息Sorry, user localuser is not allowed to execute '/bin/bash -l -c pwd' as root on hostname. 第二个解决方案意味着我有 root 密码,但我没有。 对于第二种解决方案,您不能使用您通常使用的密码来获得超级用户访问权限吗?【参考方案3】:

以下问题有一种解决方案Sorry, user localuser is not allowed to execute '/usr/bin/su - -c /bin/bash -l -c pwd' as root on hostname. 你可以试试sudo('mkdir ~/test_fabric',shell=False)。使用参数shell 来避免bash 参数-l

【讨论】:

以root身份运行python脚本

】以root身份运行python脚本【英文标题】:Runningpythonscriptasroot【发布时间】:2014-04-2917:33:53【问题描述】:我有以下脚本:#!/usr/bin/envpythonimportsysimportpyttsxdefmain():print\'runningspeech-text.py...\'engine=pyttsx.init()str="Hi..."iflen(sys.argv)& 查看详情

确保脚本以root用户身份运行

importosifos.geteuid()!=0:print"Thisprogrammustberunasroot.Aborting."sys.exit(1) 查看详情

以 root 身份运行 Node.js 脚本的 Elastic beanstalk

】以root身份运行Node.js脚本的Elasticbeanstalk【英文标题】:ElasticbeanstalkrunningNode.jsscriptasroot【发布时间】:2016-06-1916:51:59【问题描述】:我有一个node.js脚本/应用程序,我试图在AWSElasticbeanstalknode.js服务上运行。使用sudo启动脚本后... 查看详情

以 root 身份运行 Python 脚本(使用 sudo) - 有效用户的用户名是啥?

】以root身份运行Python脚本(使用sudo)-有效用户的用户名是啥?【英文标题】:RunningPythonscriptasroot(withsudo)-whatistheusernameoftheeffectiveuser?以root身份运行Python脚本(使用sudo)-有效用户的用户名是什么?【发布时间】:2011-08-0822:56:46... 查看详情

Cron,以root身份执行bash脚本,但一部分(Python脚本)以用户身份执行

】Cron,以root身份执行bash脚本,但一部分(Python脚本)以用户身份执行【英文标题】:Cron,executebashscriptasroot,butonepart(Pythonscript)asuser【发布时间】:2022-01-1718:28:24【问题描述】:我需要在JetsonNano(比如Ubuntu18.04)上定期运行bash脚... 查看详情

如何以 root 身份运行 Perl 脚本但仍会影响用户 gconf 设置

】如何以root身份运行Perl脚本但仍会影响用户gconf设置【英文标题】:HowcanIrunaPerlscriptasrootyetstillaffectusergconfsettings【发布时间】:2011-04-2200:02:34【问题描述】:新问题:我正在尝试制作一个统一的脚本,根据我的喜好初始化新的U... 查看详情

如何以用户而不是 root 用户身份运行 cron 作业 [关闭]

】如何以用户而不是root用户身份运行cron作业[关闭]【英文标题】:Howtorunthecronjobasauserinsteadofrootuser[closed]【发布时间】:2011-12-3123:43:07【问题描述】:我有几个bash脚本可以添加到指定时间的cron作业中,但它需要以root用户身份执... 查看详情

在pycharm中以管理员身份运行/调试脚本(howtorun/debugprogramsasrootinpycharm)(代码片段)

如果想要在pycharm中以root的身份运行python脚本,因为pycharm本身好像没有这个特性,目前只能通过一些额外的手段来实现。思路就是让pycharm以root身份执行python编译器。这篇文章主要面向linux环境。具体可以这样做:1.建立一个可以... 查看详情

即使以 root 身份也无法执行 bash 脚本?

】即使以root身份也无法执行bash脚本?【英文标题】:Unabletoexecutebashscriptsevenasroot?【发布时间】:2011-12-2701:42:22【问题描述】:我有一个奇怪的问题,我无法执行bash脚本,即使是这样的基本脚本:#!/bin/bashecho"me"我将它保存为test... 查看详情

在远程服务器上以 root 身份运行本地脚本 [重复]

】在远程服务器上以root身份运行本地脚本[重复]【英文标题】:runalocalscriptasrootonremoteserver[duplicate]【发布时间】:2017-07-2701:28:32【问题描述】:我尝试以root身份在多个远程服务器上运行本地脚本。我没有su来根这些,但可以使... 查看详情

通过 ADB 以 root 身份启动脚本

】通过ADB以root身份启动脚本【英文标题】:LaunchascriptasrootthroughADB【发布时间】:2012-02-0410:16:07【问题描述】:我创建了一个脚本来挂载分区并在我的Android系统中执行一些操作。我将脚本作为install.sh保存在Android的/bin文件夹中... 查看详情

如何在初始化脚本中以特定用户身份运行命令?

】如何在初始化脚本中以特定用户身份运行命令?【英文标题】:Howtorunacommandasaspecificuserinaninitscript?【发布时间】:2013-07-3103:19:38【问题描述】:我正在编写一个初始化脚本,它应该以不同于root的用户身份执行单个命令。这就... 查看详情

sh用于从ubuntu构建安全的mysql服务器的shell脚本。(必须以root身份运行并准备使用大量密码)(代码片段)

查看详情

如何检查是不是在 bash 脚本中以 root 身份运行

】如何检查是不是在bash脚本中以root身份运行【英文标题】:Howtocheckifrunningasrootinabashscript如何检查是否在bash脚本中以root身份运行【发布时间】:2013-08-1511:24:30【问题描述】:我正在编写一个需要root级别权限的脚本,我想让它... 查看详情

如何在 Jenkins 中以 root 身份运行脚本?

】如何在Jenkins中以root身份运行脚本?【英文标题】:HowtorunascriptasrootinJenkins?【发布时间】:2012-08-0611:32:45【问题描述】:我需要在Jenkins中以root而不是默认用户身份运行shell脚本。我需要改变什么?我的sudoers文件是这样的:#Use... 查看详情

sh确保以root身份执行脚本(代码片段)

查看详情

以 root 身份运行 Celery

】以root身份运行Celery【英文标题】:RunningCeleryasroot【发布时间】:2013-12-1906:09:08【问题描述】:出于访问原因,我需要以root身份运行我的Django和Celery。它说我需要设置C_FORCE_ROOT环境变量。如何/在哪里设置环境变量?【问题讨... 查看详情

以 root 用户身份运行 ElasticSearch

】以root用户身份运行ElasticSearch【英文标题】:RunningElasticSearchastherootuser【发布时间】:2017-04-0713:42:23【问题描述】:当我尝试使用./elasticsearch启动ElasticSearch5.0时出现以下错误:[2016-11-23T13:44:09,507][WARN][o.e.b.ElasticsearchUncaughtExcepti... 查看详情