отправить несколько файлов с Windows-машины на удаленный сервер Linux "Jsch code" - PullRequest
2 голосов
/ 06 июня 2011

Можно ли попытаться отправить несколько файлов на удаленный сервер с помощью Jsch, это возможно !!

Я пытаюсь отправить несколько сценариев perl для проверки некоторых существующих файлов и команд на удаленном сервере, и после этого файл, содержащий результаты, должен быть возвращен на моем локальном компьютере, проблема в том, что мне нужно использовать eclipse для тот.

ошибка:

Bareword found where operator expected at /root/port.pl line 27, near "10.156.31.46 ssh"
    (Missing operator before ssh?)
Bareword found where operator expected at /root/port.pl line 27, near "8HcmdrGQDgXKL"
    (Missing operator before HcmdrGQDgXKL?)
Bareword found where operator expected at /root/port.pl line 27, near "9N1XgcLKUcC1DgFmcYoNLb1VsU9KYRhLAOGiIjWBdRkr6gLhZTJsnd2e464"
    (Missing operator before N1XgcLKUcC1DgFmcYoNLb1VsU9KYRhLAOGiIjWBdRkr6gLhZTJsnd2e464?)
Bareword found where operator expected at /root/port.pl line 27, near "2iIe3zJSlBH1tVd8PCifJaZ6Xu4KqsDFWjIILv8wY5XMWYdxVcPcMOsQhpl7vB2EgZxrc3yxE6rwfGnyxEKWez9W9t6e2hOvx3J21PxAGTaCIPjgxbcM4G"
    (Missing operator before iIe3zJSlBH1tVd8PCifJaZ6Xu4KqsDFWjIILv8wY5XMWYdxVcPcMOsQhpl7vB2EgZxrc3yxE6rwfGnyxEKWez9W9t6e2hOvx3J21PxAGTaCIPjgxbcM4G?)
syntax error at /root/port.pl line 27, near "10.156.31.46 ssh"
Execution of /root/port.pl aborted due to compilation errors.
exit-status: 255

эта ошибка появляется, когда я использую FileOutput

java.io.FileNotFoundException: C:\Users\Computer\workspace\proj (Accès refusé)

Ответы [ 5 ]

1 голос
/ 10 мая 2012

Я создал учебники для jsch SCP Get and Put, используя java и Ant скрипт. jsch учебники

1 голос
/ 06 июня 2011

Да, это можно сделать довольно просто. Вам нужно открыть канал и просто поместить двоичный объект в канал с соответствующим местоположением. Если вы хотите сделать это с несколькими файлами, вы можете сделать это последовательно или постоянно отправлять исполнителю.

Session session = ...;// a new jSch Session with remote attributes (like ip, username and password)
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp csftp = (ChannelSftp) channel;

File file = new File(...); //binary file location to ftp
String fileAbsolutePath = ...;//The to location on remote server

csftp.put(new FileInputStream(file), fileAbsolutePath, file.length());

Это, конечно, использование jSch. Для получения дополнительной информации вы можете проверить этот пример

0 голосов
/ 06 июня 2011

Отредактировано после уточнения вопроса.

  1. Вам нужно ChannelSftp и использовать один (или более) из его put методов. Нет проблем в том, чтобы вызывать их более одного раза, даже одновременно (хотя это не увеличивает пропускную способность, это может помочь для высокой задержки. (См. Пример с ответом Джона).

  2. Затем откройте ChannelExec, чтобы выполнить ваши сценарии. Обычно вы можете дать несколько команд (разделенных ; или символами новой строки) каналу, он передаст их оболочке, которая выполнит их последовательно. В качестве альтернативы здесь можно использовать несколько каналов (один за другим или одновременно).

  3. После завершения последней команды вы снова используете ChannelSftp для загрузки файла (используйте метод get здесь).

Это на самом деле не относится к Eclipse, за исключением того, как включить библиотеку в путь сборки и запуска (если это так, указать в комментарии).

Альтернативой, если вам на самом деле не нужны скрипты в качестве файлов на сервере, будет использование варианта команды perl, которая позволяет передавать скрипт либо в командной строке (т. Е. В каналах exec). строка команды) или в качестве стандартного ввода (т. е. во входном потоке канала exec). Подробности смотрите в документации perlrun . Вы можете адаптировать свои сценарии, чтобы результат не записывался в файл, а создавался как вывод (который затем можно прочитать из вывода каналов exec).


Я добавил пример в свою версию коллекции примеров JSch.

Здесь важные части:

InputStream scriptStream =
  new BufferedInputStream(new FileInputStream(arg[0]));

String command = "perl -w - ";

Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);


// input = script
channel.setInputStream(scriptStream);

// TODO: set other streams

channel.connect();

Хорошо, давайте посмотрим на ошибки.

Во-первых, у вас есть ошибки в вашем Perl-скрипте. Это выглядит как неправильный синтаксис в строке 27. Посмотрите на эту строку, и если вы не нашли проблему, задайте новый вопрос об этом.

(Сначала следует попытаться запустить это с простым SSH-соединением, без JSch, чтобы изолировать проблемы. Или, лучше, сначала попытаться запустить его локально на вашем компьютере.)

Во-вторых, ваше FileNotFoundException (кстати, вы должны были использовать e.printStackTrace() вместо System.out.println(e); в блоке chatch).

Это Accès refusé означает, что ваша программа не имеет права писать здесь. Из других ваших путей, это не имя файла, а имя каталога. Вы не можете перезаписать каталог файлом. Используйте имя, под которым ваш файл должен быть сохранен:

File file4 = new File("C:\\Users\\Computer\\workspace\\proj\\anime.txt");
0 голосов
/ 06 июня 2011

Да, но это не легко.Sftp позволяет отправлять несколько файлов за один сеанс.Я не знаю, использует ли scp один сеанс или нет, когда он отправляет несколько файлов.

Я бы порекомендовал использовать ant task или apache camel , чтобы иметь более высокийУровень, простой в использовании интерфейс для работы.

Задача муравья представляет собой простой простой в использовании инструмент, который выполняет одну работу.

Верблюд с другой стороны, это очень гибкий инструмент, помогающий со всемипроблемы при передаче информации между различными системами на основе шаблонов интеграции предприятия.Он также предлагает больше возможностей, чтобы сделать эти переводы «промышленными силами».

0 голосов
/ 06 июня 2011

Вы можете отправлять только один файл за раз - но, возможно, вы можете использовать его в сочетании с ZipInput / OutputStream и, таким образом, отправлять несколько файлов таким образом?

...