Как я могу избежать двойных Quotes при использовании SCP с JSCH?JAVA

Программисты JAVA общаются здесь
Anonymous
Как я могу избежать двойных Quotes при использовании SCP с JSCH?

Сообщение Anonymous »

В системе Windows установлен SSH, а клавиши обмениваются с помощью удаленного хоста (Linux). Я хочу запустить банку на машине Windows для файлов SCP на машину Linux.
делает это в командной строке с < /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

Вернуться в «JAVA»