gpt4 book ai didi

Python Fabric Sudo su - 用户

转载 作者:行者123 更新时间:2023-11-28 18:03:54 29 4
gpt4 key购买 nike

我目前从命令行执行以下操作:

$ ssh myuser@remote-server 
password:
[myuser@remote-server ~]$ sudo su - dev_user
[dev_user@remote-server ~]$ whoami
dev_user
[dev_user@remote-server ~]$

没有权限问题。

myuser 有足够的权限执行上面键入的操作,但它没有执行 sudo su -c whoami dev_user 的权限

我试过下面的代码

from fabric import Connection, task

@task
def abcd(ctx):
sudo_pass = getpass.getpass("What's your sudo password?")
config = Config(overrides={'sudo': {'password': sudo_pass}})
with Connection('dev-server', user='myuser', connect_kwargs={"password": sudo_pass}, config=config) as c:
c.sudo('/bin/bash -l -c whoami', user='dev_user')

我得到以下输出:

fab abcd
What's your sudo password?
[sudo] password: Sorry, user myuser is not allowed to execute '/bin/bash -l -c whoami' as dev_user on dev-server.

有没有办法让 fabric 执行我在命令行中执行的操作?

编辑 sudoers 文件不是一个选项。

远程服务器是 Linux RH 7.6。

谢谢。

最佳答案

是的,您可以使用带有 user= 参数的 sudo 来使用 sudo 切换到另一个用户,就像您在 shell 中所做的那样:

from  fabric import Connection

c = Connection('host')
c.sudo('/bin/bash -l -c whoami', user='dev_user')

sudo accepts additional user and group arguments, which are passed to sudo and allow you to run as some user and/or group other than root. On most systems, the sudo program can take a string username/group or an integer userid/groupid (uid/gid); user and group may likewise be strings or integers.

http://docs.fabfile.org/en/1.14/api/core/operations.html?highlight=sudo#fabric.operations.sudo

只有当您可以在不输入密码的情况下运行 sudo 时,上述解决方案才有效。如果您的帐户 myuser 需要密码才能运行 sudo,那么您可以提示输入该密码,并将其传递给 fabric 的配置:

import getpass
from fabric import Connection, Config

sudo_pass = getpass.getpass("What's your sudo password?")
config = Config(overrides={'sudo': {'password': sudo_pass}})
c = Connection('host', config=config)

c.sudo('/bin/bash -l -c whoami', user='dev_user')

http://docs.fabfile.org/en/2.3/getting-started.html#the-sudo-helper

最后一个想法:

from  fabric import Connection, Config

config = Config(overrides={'sudo': {'user': 'sudo_user'}})
c = Connection('host', config=config)

c.sudo('whoami')

请注意,在这种情况下没有提供 sudo 密码,但在 Config 设置中提供了一个 userc.sudo 变回简单的 c.sudo('whoami')。这应该被 Fabric 解释为 sudo su - sudo_user

关于Python Fabric Sudo su - 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54638426/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com