我对SCP协议和JSch非常陌生。我必须通过SCP将文件从远程设备传输到Android。服务器端开发人员拒绝透露任何关于他们设备的信息,除了文件位置,以及可以使用SCP访问它的根帐户。
这是我尝试过的步骤。
-
确认使用JSch,我的Android客户端可以与服务器建立连接。[完成]
-
确认使用JSch和
ChannelExec
对象,我可以发送ls
命令并读取其输出。[完成] -
确认使用JSch和
ChannelSFTP
对象,我可以从设备传输文件。(失败)
(3)失败的原因似乎是设备(服务器)没有配置SFTP。maker一直在说ssh上的命令像下面这样工作:
scp root@192.168.5.1/usr/WS026.jpeg [targetPath]
他们说上面的命令将第一个参数复制到客户端的目标路径。所以,除了使用SFTP, 我如何在JSch通道"exec"中实现它?
如果设备只支持SCP协议,请不要尝试使用SFTP协议,使用SCP协议。
有一个使用JSch实现SCP下载的官方示例:http://www.jcraft.com/jsch/examples/ScpFrom.java.html
不要对示例代码中scp
的调用感到困惑。这就是SCP协议的工作原理。本地(OpenSSH) scp
在远程服务器上执行scp
(使用特定的非公共参数,在本例中是-f
),然后两个实例相互通信。本例实现了本地scp
。用于远程scp
的参数与用于本地scp
的参数不同。
参见JSch库中SCP协议实现说明