【问题标题】:How to run sudo commands in shell/linux using python script如何使用 python 脚本在 shell/linux 中运行 sudo 命令
【发布时间】:2023-12-03 13:19:01
【问题描述】:

如何使用python脚本运行sudo bash

import subprocess
import os

sudoPassword2 = 'abcd1234'
command2 = 'sudo bash'
p2 = os.system('echo %s|sudo -S %s' % (sudoPassword2, command2))

我收到此错误:

bash: line 1: abcd1234: command not found

当我尝试这样做时,它也给出错误

import shlex
import subprocess


command1 = shlex.split('cd /home/backups')
subprocess.call(command1)

错误 cd 没有文件或目录

也试过这个:

import shlex
import subprocess



subprocess.call(["cd","/home","/backups"])

【问题讨论】:

  • 出现这种情况是因为 bash 需要输入,并且因为没有其他内容,它使用来自 echo ...的 args ...
  • 在 sudo 下运行你的脚本本身。不要在脚本中包含您的 sudo 密码,因为它首先破坏了拥有密码的目的。如果必须,请重新配置 sudo 以允许您在没有密码的情况下执行特定命令,但不要在不了解安全隐患的情况下执行此操作。
  • cd 不是程序。请改用os.chdir

标签: python python-3.x bash shell sudo


【解决方案1】:

你可以使用os模块

import os

os.system("sudo and the code you want to run")

例如:

import os

os.system("sudo apt-get vlc")

【讨论】:

  • 脚本中仍然会有凭据。这是有问题的。
【解决方案2】:

您收到此错误是因为您的命令首先将密码发布到 cli 而没有被要求。因此 bash 会将其解释为一个显然无法执行的命令。

最好使用os.system('sudo command') 并以 root 或通过 sudo 调用脚本。这将确保您在运行时立即在脚本中拥有必要的权限。

您绝对不想做您所做的事情的另一个原因是必须将您的机器的 sudo 密码以纯文本形式写入脚本。永远不要那样做。这是邪恶的。

如果没有办法,您可以通过使用编辑器visudoNOPASSWD 指令添加到/etc/sudoers 来使sudo 执行命令而不要求输入密码(永远不要使用任何不同的东西),如下所示:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

但是,如果您确定您知道这会向系统上的任何人开放此命令的执行,而无需提升权限。这可能是一个巨大的安全风险。

【讨论】:

  • 问题的编辑没有澄清。您首先要执行什么?只有cd 进入目录?为什么是 shlex?您是否仅使用 os.system('...') 尝试了我的解决方案?
  • 也许这就是告诉我们你的程序应该做什么的重点。我怀疑对于这项任务可能有比您目前要做的更简单的解决方案。
最近更新 更多