Я использую JSch API для подключения к удаленному серверу через SFTP. Мне нужно получить копию папки, которая существует на удаленном сервере, на том же сервере. Есть ли какой-либо метод, реализованный для этого в JSch? Или будьте любезны дать мне совет, как выполнить описанный выше вариант использования. (Я работаю на Scala).

0
Dhanushka Gayashan 12 Фев 2015 в 10:11

2 ответа

Лучший ответ

Мы не можем использовать канал «sftp» для выполнения этой задачи, и мы должны использовать канал «exec» для выполнения этой задачи. Используя канал "exec", мы можем выполнять команды Linux следующим образом:

val command = "mkdir testDir"
val channelExec: ChannelExec = session.openChannel("exec").asInstanceOf[ChannelExec]
channelExec.setCommand(command);
channelExec.connect

Для получения более подробной информации перейдите по следующим ссылкам

http://www.programcreek.com/java-api-examples/index.php?api=com.jcraft.jsch.ChannelExec

http://www.journaldev.com/246/java-program-to-run-shell-commands-on-ssh-enabled-system

http://www.jcraft.com/jsch/examples/Exec.java.html

Спасибо всем участникам

2
Community 20 Июн 2020 в 09:12

Нет поддержки удаленного копирования файлов в широко распространенных реализациях протокола SFTP (особенно JSch и OpenSSH).

Для SFTP есть расширение copy-file, но немногие серверы / клиенты поддерживают его.
См. draft-ietf-secsh-filexfer-extensions-00 .

Альтернативы:

  • Загрузите папку и повторно загрузите ее в новое место (чистое решение SFTP)
  • Используйте команду cp в канале "exec" (больше не SFTP, требуется доступ к оболочке)
2
Martin Prikryl 12 Фев 2015 в 09:46