【问题标题】:Run sudo command for executable within script对脚本中的可执行文件运行 sudo 命令
【发布时间】:2018-07-17 01:43:25
【问题描述】:

我在 StackOverflow 和其他地方找到了解决这个问题的各种答案,但是,所提供的答案都没有解决我的问题。

我已经尝试过echo 018020 | underclock.sh 以及sudo visudo 方法。上面提到的都没有奏效。即使使用michallal ALL = NOPASSWD: /home/michalall/PycharmProjects/Mining/underclock.sh,我仍然会收到以下消息 - sudo no tty present and no askpass program specified

这是我的代码:

import os

ubu_path = '/home/michalall'
os_path = ubu_path
project_path = os_path + '/PycharmProjects/Mining/'

os.system('chmod +x ' + project_path + 'nvidia_settings')
os.system('cd ' + project_path + 'nvidia_settings/')

os.system('sudo ' + project_path + 'underclock.sh')

os.system('echo 018020 | underclock.sh')

编辑:

当我跑步时:

os.system('underclock.sh')

os.system('echo 018020 | underclock.sh')

os.system('echo 018020 | sudo -S underclock.sh')

我分别得到以下输出:

sh: 1: underclock.sh: not found.

sudo no tty present and no askpass program specified

sudo no tty present and no askpass program specified

【问题讨论】:

  • 你试过在root用户下运行你的python脚本吗?
  • 您通常应该避免在脚本中调用sudo。相反,如果用户想提升其权限,请让用户在您的脚本上调用 sudo。脚本应该只使用它们已经拥有的任何权限。
  • @JohnKugelman 我同意。我唯一遇到过这样的问题是当我的脚本通过 SSH 在远程机器上执行需要 root 权限的事情时。
  • @JohnKugelman,你能解释一下吗?如果脚本需要 sudo 运行,那么让用户选择在不使用 sudo 的情况下运行它的意义何在?使用 sudo 完成每个命令而不是只使用少数需要它的命令有什么好处?
  • 在脚本中嵌入sudo 命令意味着脚本可以部分执行,然后尝试运行sudo 并失败。 sudo 旨在成为一个交互式工具。如问题所示,它可能难以在脚本中间提示输入密码。让用户在前面显式调用sudo 会加载权限提升。用户可能希望将选项传递给sudo,例如-A 以弹出图形密码提示或-u 以切换到更高权限但仍非root 用户。

标签: python linux shell executable


【解决方案1】:

尝试使用echo <password> | sudo -S <cmd>,以便sudo 可以从标准输入而不是终端设备读取密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2023-04-02
    相关资源
    最近更新 更多