【问题标题】:How to execute shell script with sudo from java backend?如何从 java 后端使用 sudo 执行 shell 脚本?
【发布时间】:2019-05-22 12:06:58
【问题描述】:

我不知道如何从 java 后端执行像 sudo some.sh 这样的命令。 sudo 是无密码的。

我尝试了 exec() 和 builder 没有任何运气(见下文)。如果我尝试通过 exec("sudo touch text.txt");它有效。

 String[] cmdScript = new String[]{"/bin/bash", "/var/backup/dump/replication.sh"};
        Process procScript = Runtime.getRuntime().exec(cmdScript);

任何想法我可能做错了什么?

谢谢

【问题讨论】:

  • 我会尝试成为运行您的 Java 应用程序的用户,然后执行 sudo touch text.txt。错误的sudoers 条目和不同的工作目录(尝试绝对路径)是我能想到的最常见的陷阱。
  • set -x; exec > /tmp/logfile 2>&1添加为脚本的第二行,然后查看/tmp/logfile中的跟踪日志和错误消息
  • 尝试了所有选项。我正在传递绝对路径,而且我的 sudo 用户也不需要密码。还尝试将脚本放入 /tmp 并从那里执行,但没有任何效果。日志文件也没有填写任何内容。

标签: java linux bash shell ubuntu


【解决方案1】:

我的猜测是:

String[] cmdScript = new String[]{"/bin/bash", "sudo /var/backup/dump/replication.sh"};

String[] cmdScript = new String[]{"/bin/bash", "sudo", "/var/backup/dump/replication.sh"};

由于 sudo 通常需要密码,因此您可能需要将密码输入其中。

String[] cmdScript = new String[]{"/bin/bash -c", "echo 'password' | sudo -S /var/backup/dump/replication.sh"};

这未经测试,但应该能让您走上正轨。如果没有,看来已经解决了here

【讨论】:

  • 我添加了一个参考供您查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2014-12-18
  • 2017-12-05
  • 2012-07-05
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多