【问题标题】:Python: How to execute a program over SSH that requires `sudo`Python:如何通过 SSH 执行需要 sudo 的程序
【发布时间】:2017-08-23 15:01:48
【问题描述】:

我需要使用 SSH 在远程 Linux 机器上运行一个守护进程。

守护进程的名字是pigpiod,属于pigpio模块(控制树莓派的GPIO),Ubuntu Mate 16.04。

执行不需要sudo 的命令(例如-ls)- 脚本运行正常,而需要sudo 的命令运行失败。

adress='192.168.2.112' ,是一个远程Linux来运行这个守护进程。

下面的代码失败(运行sudo pigpiod):

def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','guy@'+adress,'sudo','pigpiod'])

下面的代码成功(运行ls -l

def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','guy@'+adress,'ls','-l'])

为了检查subprocess.run 是否能够执行 sudo+ 命令 - 我在同一台机器上尝试本地化并且成功:

def run_process():
    try:
        check_output(["pidof","pigpiod"])
        print("pigpiod already loaded")
    except:
        subprocess.CalledProcessError
        print("Not Loaded")
        subprocess.run(['sudo','pigpiod'])
        if os.system("pgrep -x "+name)==0:
            print("Loaded successfully")

【问题讨论】:

标签: python subprocess


【解决方案1】:

代码已更改(感谢@Hamuel 的评论)- 如proper way to sudo over ssh 中所述

def runpigpiod_remote(adress):
    result = subprocess.run(['ssh','-t','guy@'+adress,'sudo','pigpiod'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 2021-06-13
    • 2011-05-09
    • 1970-01-01
    • 2012-07-05
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多