Невозможно запустить командный файл на удаленном сервере Windows, используя JSCH - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть отдельное приложение, которое должно подключиться к серверу Windows с помощью ssh и запустить пакетный скрипт с локального компьютера на этом сервере Windows.

шаги сделаны:

  1. подключено к серверу Windowsс помощью JSCH.
  2. перенес файл в папку D: \ scripts \ script.bat на удаленном компьютере с Windows.
  3. попытался запустить скрипт.

ПроблемаЯ сталкиваюсь с тем, что я не могу выполнить скрипт, как только он на удаленном сервере.

пробовал различные комбинации в методе 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

оба потока возвращаются пустыми, ноэто должно напечататьПеременная пути.

...