делает это в командной строке с < /p>
"C:/Program Files (X86)/ICW/bin/SCP.exe" -i .ssh/id_rsa theUser@xxx.xxx.xx.xx:/target/path/
< /code>
он работает хорошо (используя двойные кавычки). < /p>
Но когда я запускаю SCP из банки с использованием jsch < /strong> я получаю sun.nio.file.invalidpathexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexpect. Группа файлов программно из FTP -хоста (я уже работал, чтобы они работали). хост. < /p>
Как я могу решить эту проблему? private void storeFiles() throws IOException {
final JSch jsch = new JSch();
final FileSystem fs = FileSystems.getDefault();
final Path p = fs.getPath( getProperty("scp.key.file.private"));
logger.info("Reading private key from " + getProperty("scp.key.file.private"));
final Session session;
try {
session = jsch.getSession(getProperty("scp.user.name"), getProperty("scp.host.ip"),
Integer.parseInt(getProperty("scp.port")));
jsch.addIdentity(p.toFile().getPath());
final Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
logger.info("Connected to " + getProperty("scp.host.ip") + "...");
vaFiles.forEach((k, v) ->{
// get I/O streams for remote scp
try {
final MessageFormat mf = new MessageFormat(getProperty("scp.command"));
final Object[] commandArgs = new Object[]{getProperty("scp.key.file.private"),
k, getProperty("scp.user.name"),
getProperty("scp.host.ip"),
getProperty("scp.target.path"), k};
final String command = mf.format(commandArgs);
logger.info(command);
final Channel channel;
try {
channel = session.openChannel("exec");
channel.connect();
((ChannelExec)channel).setCommand(command);
// logger.info("Writing " + Arrays.toString(v) + " to SCP channel...");
final OutputStream out = channel.getOutputStream();
out.write(command.getBytes());
out.flush();
out.write(v);
out.close();
channel.disconnect();
} catch (JSchException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}); //end forEach
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
}
}
< /code>
, посвященный vafiles < /em> IS map и scp.command < /em> выходит из файла свойств и < /p>
scp.command = '\"C\:/Program\u0020Files\u0020(x86)/ICW/bin/scp.exe\"' -i {0} {1} {2}@{3}\:{4}/{5}
< /code>
(я попытался обернуть строку команды в отдельные кавычки, двойные кавычки, без кавычек, без \ u0020, ...) < /p>
заполняется с помощью messageformat < /em> с < /p>
{0} =. '\ "C:/program \ u0020files \ u0020 (x86) /icw/bin/scp.exe \"'
{1} = the filename
{2} = scp usernam Адрес < /p>
{4} = Целевой путь на удаленном хосте < /p>
{5} = имя файла (см. {1}) < /p>
sftp в настоящее время не является вариантом, если у меня есть только что -то, что у меня есть. Буду признателен за любую передачу ноу-хау, чтобы узнать, как сделать это правильно.
Подробнее здесь: https://stackoverflow.com/questions/466 ... -with-jsch