需要使用我的id登录,执行以下命令
执行脚本:./ app / t1.sh status
String sudoCommand ="sudo su - tstusr";
List commands = new ArrayList();
commands.add("./app/t1.sh status")
try {
channel = (ChannelExec) session.openChannel("exec");
channel.setPty(true);
channel.setCommand(sudoCommand);
channel.connect();
List<String> resultString = null;
for (String command : commands) {
result = new ArrayList<>();
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
InputStream err = channel.getErrStream();
out.write((command.concat("\n")).getBytes());
out.flush();
resultString = readStream(channel, in, true);
LOGGER.debug("execute command {} o/p {} ",commands, resultString);
result.addAll(resultString);
}
} finally {
if (channel != null) {
channel.disconnect();
}
}
执行时使用/app/t1.sh挂起:没有文件或目录。 上述文件由&#34; tstusr&#34;提供并拥有。并且似乎setcommand没有完成导致错误的sudo su - 命令。
输出:
20:28:13.492 INFO o.t.u.r.repoImpl- Output stream execution ./app/t1.sh start
-bash: ./app/t1.sh: No such file or directory
[tstusr@hosrtch102 ~]$
@Update 此错误我只能在调试模式下看到并在channel.connect()行之后保留此调试器。这意味着内部需要一点延迟似乎
我尝试删除。来自&#34; ./ app / t1.sh&#34;的脚本面前to&#34; /app/t1.sh" ;,它没有工作,但正如所提到的,它在java的调试模式下工作正常有延迟,我应该在&#34; channel.connect&之后添加线程等待#34;
1)我应该在channel.connect()之后添加延迟 2)在set命令中添加sudo命令后,我应该检查退出状态还是out stream,然后在out stream中提供第二个命令