首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过j2ssh运行sudo命令

通过j2ssh运行sudo命令
EN

Stack Overflow用户
提问于 2015-05-29 03:03:40
回答 2查看 185关注 0票数 0

我正在尝试编写一些连接到linux工作站的Java代码,使用sudo执行命令,然后阻塞,直到命令完成。

代码语言:javascript
复制
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();

似乎不等待程序完成或返回输出。

代码语言:javascript
复制
    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 \“触摸/tmp/任何东西\”“(触摸不是我正在运行的命令,只是用它来测试。)这不管用。

"sudo touch /tmp/随便什么“这不起作用。

做这件事的秘诀是什么?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-07-20 19:16:22

您是否在最初的基于“startShell”的方法中使用了wait语句?

代码语言:javascript
复制
session.getState().waitForState(ChannelState.CHANNEL_CLOSED);

post中的代码似乎试图在编写sudo命令后立即捕获命令输出。由于IOStreamConnector会派生线程来读取命令,因此在关闭会话之前,该命令可能尚未完成。

票数 0
EN

Stack Overflow用户

发布于 2016-06-06 20:34:53

我建议使用这样的东西,对我来说效果很好:

代码语言:javascript
复制
if ( session.executeCommand("echo "+"/'your_sudo_password/' "+"| "+ "sudo -S "+command) ) {
                IOStreamConnector output = new IOStreamConnector();
                ByteArrayOutputStream bos =  new ByteArrayOutputStream();
                output.connect(session.getInputStream(), bos );
                session.getState().waitForState(ChannelState.CHANNEL_CLOSED);
                theOutput = bos.toString();....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30515082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档