【发布时间】:2015-05-28 19:03:40
【问题描述】:
我正在尝试编写一些连接到 linux 工作站的 Java 代码,使用 sudo 执行命令,然后阻塞直到命令完成。
session.getOutputStream().write("sudo -s \n".getBytes());
session.getOutputStream().write(command.getBytes());
session.getOutputStream().write("\n exit\n".getBytes());
IOStreamConnector output = new IOStreamConnector();
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
output.connect(session.getInputStream(), bos);
String theOutput = bos.toString();
似乎没有等待程序完成或返回输出。
session.executeCommand(command);
IOStreamConnector output = new IOStreamConnector();
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
output.connect(session.getInputStream(), bos);
session.getState().waitForState(ChannelState.CHANNEL_CLOSED);
theOutput = bos.toString();
效果很好,但不适用于 sudo。我试过设置命令:
"su -c \"touch /tmp/whatever\"" (touch不是我正在运行的命令,只是用来测试。)这不起作用。
“sudo touch /tmp/whatever”这不起作用。
这样做的神奇公式是什么????提前致谢。
【问题讨论】:
-
是否需要 sudo 命令的密码?
-
不,它不需要密码。我在 sudoers 文件中配置了不需要密码。不过谢谢你的建议。