subprocess 怎么样才能切换到特定用户呢?

2022-01-26 02:03:54 +08:00
 szxczyc

想要登录到机器上去,切换到用户runjob-admin,在脚本里写了命令sudo su - runjob-admin;,但是完成不能执行。导致接下来的进入文件夹和创建新文件都失败了

import subprocess
def run_command(cmd_list):
    process = subprocess.run(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True,timeout=60)
    if process.returncode != 0:
        return None, process.stderr
    return process.stdout, None

def run(client,ip):
    scipt = """
            sudo su - runjob-admin;
            cd lisi/runjob/;
            touch xxxxxxxxxxxxx.py;
            """

    cmd = [client, ip]
    cmd.extend(scipt.split())
    output, err = run_command(cmd)
    print(output)
    if err is not None:
        return
    try:
        data = eval(output)
    except Exception as e:
        return

    return data
    
date = run("jobtool-ssh", "10.10.1.1")#jobtool-ssh 是一个内部登录工具
1307 次点击
所在节点    问与答
8 条回复
msg7086
2022-01-26 02:38:05 +08:00
一个普通进程是没有办法提权到超级用户的,除非是有严重的提权安全漏洞。
在你的代码里,sudo 是 root 权限运行的,所以 sudo 内部(比如用 sudo 运行的程序,或者用 sudo 启动的 shell )可以以 root 权限运行。一旦速度结束,root 权限也就结束了。

sudo su - runjob-admin;
↑这里 root 权限开始。 ↑这里 root 权限结束。
Yadomin
2022-01-26 02:46:35 +08:00
sudo -u user command
Buges
2022-01-26 07:06:34 +08:00
iScout
2022-01-26 08:58:53 +08:00
sudo 只能管到第一个分号,后面的没有 sudo 权限
zhaohui318
2022-01-26 10:20:23 +08:00
```
sudo -i -u runjob-admin bash << EOF
cd lisi/runjob/;
touch xxxxxxxxxxxxx.py;
EOF
```
szxczyc
2022-01-26 10:50:44 +08:00
@zhaohui318 这个方法是好的,但是如果我想要跑一个 ansible-playbook 的任务并且拿到返回值这样是不是就不行了~
Kinnice
2022-01-27 11:05:26 +08:00
登录 runjob-admin 账号,进行操作。
abw
2022-01-27 16:16:19 +08:00
试下 sshpass:sshpass -p <passwd> ssh <user>@<host> "echo <passwd> | sudo -S <command>"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX