使用“exec”通道进行JSch SCP文件传输

时间:2016-10-16 02:58:19

标签: java android scp jsch

我是SCP协议和JSch的新手。我必须通过SCP将文件从远程设备传输到Android。服务器端开发人员拒绝透露任何有关其设备的信息,除了文件位置以及可用于通过SCP访问它的root帐户。

以下是我尝试的步骤。

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

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

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

  4. (3)失败的原因似乎是没有为SFTP配置设备(服务器)。制造商继续说下面的ssh上的命令有效:

    scp root@192.168.5.1/usr/WS026.jpeg [targetPath]
    

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

1 个答案:

答案 0 :(得分:3)

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

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

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

另见Explanation for SCP protocol implementation in JSch library