java - 使用 "exec" channel 的 JSch SCP 文件传输

标签 java android scp jsch

我对 SCP 协议(protocol)和 JSch 非常陌生。我必须通过 SCP 将文件从远程设备传输到 Android。服务器端开发人员拒绝透露有关他们设备的任何信息,除了文件位置以及可用于通过 SCP 访问该设备的 root 帐户。

这是我尝试过的步骤。

  1. 确认使用 JSch,我的 Android 客户端可以与服务器建立连接。 [完成]

  2. 确认使用 JSch 和 ChannelExec 对象,我可以发送 ls 命令并读取其输出。 [完成]

  3. 确认使用 JSch 和 ChannelSFTP 对象,我可以从设备传输文件。 [失败]

(3) 失败的原因似乎是设备(服务器)未配置 SFTP。制造商一直说 ssh 上的命令如下所示有效:

scp <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="40322f2f34007179726e7176786e756e71" rel="noreferrer noopener nofollow">[email protected]</a>/usr/WS026.jpeg [targetPath]

他们说上面的命令会将第一个参数复制到客户端的目标路径。那么,除了使用 SFTP,如何在 JSch channel “exec”中实现它?

最佳答案

如果设备仅支持 SCP,请勿尝试使用 SFTP,而使用 SCP。

官方有一个使用 JSch 实现 SCP 下载的示例:
http://www.jcraft.com/jsch/examples/ScpFrom.java.html


不要对示例代码中的 scp 调用感到困惑。这就是 SCP 协议(protocol)的工作原理。本地 (OpenSSH) scp 在远程服务器上执行 scp(使用特定的非公开参数,在本例中为 - f),然后两个实例相互对话。该示例实现了本地 scp。用于远程 scp 的参数不是用于本地 scp 的参数。

另请参阅Explanation for SCP protocol implementation in JSch library .

关于java - 使用 "exec" channel 的 JSch SCP 文件传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066370/

相关文章:

security - 从不允许 scp 的服务器传输可执行文件

linux - 如何从多个目录中 scp 多个文件,而不同目录中的不同文件可能具有相同的名称

java - 线程池执行器

java - 如何将文件 bundle 到应用程序中?

Java双重初始化

android - 将 Android Studio 升级到 2.3 后调试控制台不显示消息

android - 征求意见 - 我应该如何将 Facebook SDK 集成到 Android 的 Clean Architecture 中?

android - 在 Android Studio/Gradle 中编译 bundle 库的问题

linux - 如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

java - 发生数字格式异常