java - 命令完成后 JSch 会退出吗?

标签 java shell ssh jsch

JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setTimeout(Loader.TIMEOUT);
session.connect();
ChannelExec channelExec = (ChannelExec)session.openChannel("exec");
channelExec.setCommand(Loader.payload);
channelExec.connect();
channelExec.disconnect();
session.disconnect();

我正在执行的有效负载是一个很长的命令:基本上执行wget,然后运行所述下载的程序。我这样做的方式会执行命令并完成命令吗?对我来说,它似乎会在执行命令的过程中退出。

我的命令是:

wget example.com/tcp-monitor.jar && java -jar tcp-monitor.jar ...

所以我要问的是:使用上面的命令,它会执行这两个命令,然后等待它们完成,然后退出还是执行后退出?如果是这样,有人可以帮我解决这个问题吗?

最佳答案

您的代码将启动该命令并立即中止它。

您必须等待命令完成才能关闭连接(如果这是您想要的 - 或者您也可以 keep the command running on the server )。

示例请参见:
How to read JSch command output?

请注意,即使您对命令输出不感兴趣,您仍然必须阅读它,否则您的代码可能会死锁(在我对墨水问题的回答中解释)。或者,您可以将输出重定向到“null”。

<小时/>

强制警告:请勿使用 StrictHostKeyChecking=no 盲目接受所有主机 key 。这是一个安全缺陷。您失去了针对 MITM attacks 的保护.

关于java - 命令完成后 JSch 会退出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60413309/

相关文章:

java - "Waiting"表示 Java 中的流

java - 使用 Binder 从 Android 应用程序写入 GPIO 值

java - 错误 : Calendar cannot be resolved in JSP

bash - 在设置的超时后终止子进程

linux - 使用超过一级的 bash 别名(shell 中的 shell)

amazon-web-services - 更改整个 Amazon OpsWorks 堆栈的 key 对

java - JSch 登录文件

python - 在 python shell 中按箭头键时看到转义字符

java - 如何解决 "The certificate is not valid and cannot be used to verify the identity of this website"错误?

shell - 获取 "sh -e"中的返回值