【问题标题】:How can I run a sudo script from "external tools" in IntelliJ / WebStorm / PhpStorm?如何从 IntelliJ / WebStorm / PhpStorm 中的“外部工具”运行 sudo 脚本?
【发布时间】:2012-10-25 21:38:47
【问题描述】:

我希望我的 root-requiring bash 脚本从 IntelliJ/WebStorm 运行,当我运行它时询问我的 root 密码。在脚本中硬编码我的 root 密码当然是个坏主意。

IntelliJ/WebStorm 实际上有一个 $Prompt$ 宏,因为这样的原因,它会提示您并将您的输入用作值。

所以我尝试使用 $Prompt$echo YOURPASSWORD | sudo -S yourcommand,如use-sudo-with-password-as-parameter 中所述。

然后我通过 passwd & script 运行到 sudorun.sh 脚本 echo -e $1 | sudo -S $2 $3 $4 (因为 echo 不能是“程序”行)虽然在 CLI 上工作,但它无法读取 echo-stdin在 IntelliJ 控制台上。

理想情况下,我希望仅在 IntelliJ 内配置解决方案,而不需要在 IntelliJ 之外更改特定的操作系统配置。

也许还有其他方法可以解决这个问题,所以让我们即兴发挥吧!

【问题讨论】:

  • 我建议不要让 PhpStorm 执行实际命令,而是编写自定义 shell 脚本来执行所有这些操作并执行它,并且只传递所需的参数(相关项目/文件的路径等)。
  • 抱歉,这不是主要要求:传递 sudo pswd。我想绑定 f.i. alt+b 到 './mybuild.sh' 出于某种原因需要 sudo。我该怎么做?
  • 我想说的是——在你的实际脚本中调用sudo(或任何命令)。如果您甚至无法从 PhpStorm 启动您的 ./mybuild.sh(因为即使启动它也需要 sudo)......那么我真的无能为力。
  • 即使您在脚本中使用 sudo,您如何建议在调用时从 IDE 传递 pswd?
  • 我的想法是它将在脚本内部询问,而不是从 IDE 传递。

标签: linux intellij-idea sudo phpstorm webstorm


【解决方案1】:

我也遇到了同样的问题,但我在我的开发机器上处理敏感数据,并且无法删除 sudoers 的密码要求。

我可以通过使用 sudo 命令从命令行启动实际的 WebStorm 应用程序来解决此问题,如下所示:

sudo /Applications/WebStorm.app/Contents/MacOS/webide

以这种方式启动 WebStorm/PhpStorm 后,您可以使用 root 访问权限运行脚本,而无需提供 root 凭据。

【讨论】:

    【解决方案2】:

    使用sudoNOPASSWD 功能。将这样的规则添加到sudoers(通过visudo 或类似的):

    someuser      ALL = NOPASSWD: /usr/bin/interesting_program
    %somegroup    ALL = NOPASSWD: /usr/bin/interesting_program
    

    【讨论】:

    • 有用,但没有回答主要问题:run a sudo script from “external tools”
    • 我正在通过“即兴创作”“寻找另一种方法来做到这一点”。 :) 说真的,这不能解决挑战吗? java(“外部工具?”)可以调用sudo /usr/bin/interesting_program,您不再需要向sudo发送密码。
    • 是的,它是一个有效且通用的解决方案,但它与操作系统而不是 IDE 相关联,这是我更喜欢的。
    【解决方案3】:

    我发现自己自动化了很多工作流程,并遇到了同样的问题。我不想在我的 sudoer 权限上打一个洞,我也不想以 root 身份运行我的 IDE。我发现的一个很好的解决方案是gksudo,在 Ubuntu 和许多其他 Linux 变体上,您会发现它默认安装。 gksudo 所做的是它允许您提示用户(您自己)使用图形覆盖输入您的密码,就像 Ubuntu/KDE/等一样。当您需要以 root 身份执行更新等操作时执行此操作。

    这将提示您提供密码以提升权限,然后以 root 身份执行给定的命令/程序。

    编辑工具窗口中:

    1. 程序设置为/usr/bin/gksudo
      • gksudo 可能位于不同的路径,尝试:whereis gksudo 找到它的路径
    2. 引号中为您要执行的所有命令设置参数
      • 例如。 "mongod --fork --config /etc/mongodb.conf; service elasticsearch start"
      • 确保您有引号!
    3. 设置工作目录(如果需要)

    【讨论】:

    • 今天更多的是gksu。使用sudo apt-get install gksu 安装它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多