Java JSCH-在exec或shell通道中发送EOF

时间:2019-01-14 19:49:32

标签: java jsch

我正在尝试发送 CTRL + C (^ C)或 CTRL + D ( ^ D)使用Java的JSCH对SSH服务器的行为。

我目前不知道如何通过exec或ssh通道发送EOF消息。

有人可以帮我吗?

编辑:

在我要执行的代码下面:


import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.io.InputStream;

public class Test {

    private static final JSch JSCH_INSTANCE = new JSch();

    public static void main(String[] args) throws Exception {
        Session session = JSCH_INSTANCE.getSession("username", "domain");
        session.setPassword("password");
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        channel.setInputStream(null);
        InputStream err = channel.getErrStream();
        InputStream in = channel.getInputStream();
        channel.setCommand("sudo service rscedit start");
        channel.connect();
        while (channel.getExitStatus() == -1) {
            Thread.sleep(10);//command stays stuck here because EOF isn't being sent?
        }
        InputStream result = err.available() > 0 ? err : in;
        StringBuilder responseBuilder = new StringBuilder();
        while(result.available() > 0) {
            responseBuilder.append((char) result.read());
        }
        System.out.println(responseBuilder);
        channel.disconnect();
        session.disconnect();
    }

}

该服务正在执行以下bash脚本:

#!/bin/sh
(java -jar -Xmx20480m /home/path/Somejar.jar)
read –n1

我可以在命令末尾添加EOF吗?

1 个答案:

答案 0 :(得分:0)

在我看来,这似乎是“ rscedit”服务启动脚本中的错误。

因此,没有正确的解决方案-您要找的是最好的解决方法。

从您的评论看来,您实际上并不需要发送 Ctrl + C 。启动脚本*挂起时,该服务已经启动并正在运行。

因此,您可能只是在较短的时间间隔后才关闭频道。这实际上与 Ctrl + C 在交互式终端中所做的相同。