JSch завершает работу после завершения команды? - PullRequest
1 голос
/ 26 февраля 2020
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, а затем запускается указанная загруженная программа. Будет ли способ, которым я это делаю, выполнить команду и FINI SH команду? Мне кажется, что он выполнил бы половину выполнения команды.

Моя команда:

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

Итак, я спрашиваю: с моей командой, приведенной выше, будет ли она выполнять оба команды, затем дождитесь, пока они завершат sh, затем выйдите или он просто завершится после выполнения? Если так, может кто-нибудь помочь мне исправить это?

1 Ответ

0 голосов
/ 26 февраля 2020

Ваш код запустит команду и немедленно прервет ее.

Вам нужно подождать, пока команда завершит sh, прежде чем закрывать соединение (если это то, что вы хотите - в качестве альтернативы вы можете сохранить команда, запущенная на сервере ).

Например, см .:
Как прочитать вывод команды JSch?

Обратите внимание, что даже если вы не заинтересованы в выводе команды, вам все равно придется ее прочитать, в противном случае ваш код может зайти в тупик (при моем ответе на подписанный вопрос поясняется). Кроме того, вы можете перенаправить вывод на «ноль».


Обязательное предупреждение: не используйте StrictHostKeyChecking=no для слепого принятия всех ключей хоста. Это недостаток безопасности. Вы теряете защиту от MITM атак .

...