У меня есть отдельное приложение, которое должно подключиться к серверу Windows с помощью ssh и запустить пакетный скрипт с локального компьютера на этом сервере Windows.
шаги сделаны:
- подключено к серверу Windowsс помощью JSCH.
- перенес файл в папку D: \ scripts \ script.bat на удаленном компьютере с Windows.
- попытался запустить скрипт.
ПроблемаЯ сталкиваюсь с тем, что я не могу выполнить скрипт, как только он на удаленном сервере.
пробовал различные комбинации в методе sftpchannel.setCommand () для выполнения файла.
на данный моментв коде я просто пытаюсь напечатать переменную пути, но моя последняя цель - запустить сценарий пакетного файла.
также параметры, передаваемые в executeFileforWindows (String localpath, String targetPath):
localPath = D: \ scripts \ script.bat Целевой путь = /cygdrive/d/scripts/script.bat
public List<String> executeFileforWindows(String localpath, String targetPath) {
List<String> result = new ArrayList<String>();
try {
JSch jsch = new JSch();
Session session = jsch.getSession(USERNAME, HOST, PORT);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(PASSWORD);
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
sftpChannel.put(localpath, targetPath);
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
InputStream in = channelExec.getInputStream();
InputStream err = channelExec.getErrStream();
channelExec.setCommand("cmd.exe /c \"echo %PATH%\"");
channelExec.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
BufferedReader errreadr = new BufferedReader(new InputStreamReader(err));
String line;
String errline;
List<String> errres = new ArrayList<>();
while ((line = reader.readLine()) != null) {
result.add(line);
}
while ((errline = errreadr.readLine()) != null) {
errres.add(errline);
}
System.out.println("error stream>>" + errres);
System.out.println("success stream>>" + result);
int exitStatus = channelExec.getExitStatus();
channelExec.disconnect();
session.disconnect();
if (exitStatus < 0) {
System.out.println("Done, but exit status not set!");
} else if (exitStatus > 0) {
System.out.println("Done, but with error!" + exitStatus);
} else {
System.out.println("Done!");
}
} catch (Exception e) {
System.err.println("Error: " + e);
}
return result;
}
фактический результат:
error stream>>[]
success stream>>[]
Done, but with error!255
оба потока возвращаются пустыми, ноэто должно напечататьПеременная пути.