我正在尝试发送 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吗?
答案 0 :(得分:0)
在我看来,这似乎是“ rscedit”服务启动脚本中的错误。
因此,没有正确的解决方案-您要找的是最好的解决方法。
从您的评论看来,您实际上并不需要发送 Ctrl + C 。启动脚本*挂起时,该服务已经启动并正在运行。
因此,您可能只是在较短的时间间隔后才关闭频道。这实际上与 Ctrl + C 在交互式终端中所做的相同。