通过java进行scp传输
通过 Java 编程语言执行 scp 传输的最佳方法是什么? 看来我可以通过 JSSE、JSch 或 bouncy castle java 库来执行此操作。 这些解决方案似乎都没有一个简单的答案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
通过 Java 编程语言执行 scp 传输的最佳方法是什么? 看来我可以通过 JSSE、JSch 或 bouncy castle java 库来执行此操作。 这些解决方案似乎都没有一个简单的答案。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(15)
我最终使用了 Jsch - 它非常简单,并且似乎可以很好地扩展(我正在抓住每隔几分钟就有几千个文件)。
I ended up using Jsch- it was pretty straightforward, and seemed to scale up pretty well (I was grabbing a few thousand files every few minutes).
插件:sshj 是唯一明智的选择! 请参阅以下示例以开始使用: 下载,上传。
plug: sshj is the only sane choice! See these examples to get started: download, upload.
看看这里
是蚂蚁的SCP任务的源代码。 “execute”方法中的代码是其具体细节所在。 这应该能让您清楚地了解需要什么。 我相信它使用 JSch。
或者,您也可以直接从 java 代码执行此 Ant 任务。
Take a look here
That is the source code for Ants' SCP task. The code in the "execute" method is where the nuts and bolts of it are. This should give you a fair idea of what is required. It uses JSch i believe.
Alternatively you could also directly execute this Ant task from your java code.
我用一些实用方法封装了 Jsch,使其更加友好,并将其命名为
Jscp
可在此处获取: https://github.com /willwarren/jscp
SCP 实用程序,用于 tar 一个文件夹,将其压缩,然后将其 scp 到某处,然后解压缩。
用法:
还包括有用的类 - Scp 和 Exec,以及 TarAndGzip,它们的工作方式几乎相同。
I wrapped Jsch with some utility methods to make it a bit friendlier and called it
Jscp
Available here: https://github.com/willwarren/jscp
SCP utility to tar a folder, zip it, and scp it somewhere, then unzip it.
Usage:
Also includes useful classes - Scp and Exec, and a TarAndGzip, which work in pretty much the same way.
这是高级解决方案,无需重新发明。 又快又脏!
1) 首先,转到 http://ant.apache.org/bindownload。 cgi 并下载最新的 Apache Ant 二进制文件。 (现在是 apache-ant-1.9.4-bin.zip)。
2) 解压下载的文件并找到 JAR ant-jsch.jar (“apache-ant-1.9.4/lib/ant-jsch.jar”)。 将此 JAR 添加到您的项目中。 还有 ant-launcher.jar 和 ant.jar。
3) 转到 Jcraft jsch SouceForge 项目 并下载罐子。 如今, jsch-0.1.52 .jar。 另外将此 JAR 添加到您的项目中。
现在,您可以轻松地在 java 代码中使用 Ant 类 Scp 来通过网络复制文件,或者使用 SSHExec 来执行 SSH 服务器中的命令。
4) 代码示例 Scp:
This is high-level solution, no need to reinvent. Quick and dirty!
1) First, go to http://ant.apache.org/bindownload.cgi and download latest Apache Ant binary. (nowadays, apache-ant-1.9.4-bin.zip).
2) Extract the downloaded file and find the JAR ant-jsch.jar ("apache-ant-1.9.4/lib/ant-jsch.jar"). Add this JAR in your project. Also ant-launcher.jar and ant.jar.
3) Go to Jcraft jsch SouceForge Project and download the jar. Nowadays, jsch-0.1.52.jar. Also Add this JAR in your project.
Now, can you easyly use into java code the Ant Classes Scp for copy files over network or SSHExec for commands in SSH servers.
4) Code Example Scp:
以下是使用 JSch 上传文件的示例:
ScpUploader.java
:AppEntryPoint.java
:Here is an example to upload a file using JSch:
ScpUploader.java
:AppEntryPoint.java
:openssh 项目列出了几个 Java 替代方案,Trilead SSH for Java 似乎符合您的要求。
The openssh project lists several Java alternatives, Trilead SSH for Java seems to fit what you're asking for.
我使用这个 SFTP API,它有一个名为 Zehon 的 SCP,它很棒,很容易使用,有很多示例代码。 这是网站 http://www.zehon.com
I use this SFTP API which has SCP called Zehon, it's great, so easy to use with a lot of sample code. Here is the site http://www.zehon.com
我查看了很多此类解决方案,但其中很多都不喜欢。 主要是因为必须识别已知主机的烦人步骤。 相对于 scp 命令,JSCH 的级别低得离谱。
我发现一个不需要这个的库,但它被捆绑起来并用作命令行工具。 https://code.google.com/p/scp-java-client/
我查看了源代码并发现了如何在没有命令行的情况下使用它。 这是上传的示例:
最大的缺点是它不在 Maven 存储库中(我可以找到)。 但是,易用性对我来说是值得的。
I looked at a lot of these solutions and didn't like many of them. Mostly because the annoying step of having to identify your known hosts. That and JSCH is at a ridiculously low level relative to the scp command.
I found a library that doesn't require this but it's bundled up and used as a command line tool. https://code.google.com/p/scp-java-client/
I looked through the source code and discovered how to use it without the command line. Here's an example of uploading:
The biggest downside is that it's not in a maven repo (that I could find). But, the ease of use is worth it to me.
jsCH 对我来说非常有效。 下面是连接到 sftp 服务器并将文件下载到指定目录的方法示例。 建议不要禁用 StrictHostKeyChecking。 尽管设置起来有点困难,但出于安全原因,指定已知主机应该是常态。
jsch.setKnownHosts("C:\Users\test\known_hosts"); 推荐
JSch.setConfig("StrictHostKeyChecking", "no"); - 不推荐
jsCH has worked great for me. Below is an example of a method that will connect to sftp server and download files to specified directory. It is recommended to stay away from disabling StrictHostKeyChecking. Although a little bit more difficult to set up, for security reasons specifying the known hosts should be the norm.
jsch.setKnownHosts("C:\Users\test\known_hosts"); recommended
JSch.setConfig("StrictHostKeyChecking", "no"); - not recommended
就像这里的一些人一样,我最终围绕 JSch 库编写了一个包装器。
它称为 way-secshell,托管在 GitHub 上:
https://github.com/objectos/way-secshell
Like some here, I ended up writing a wrapper around the JSch library.
It's called way-secshell and it is hosted on GitHub:
https://github.com/objectos/way-secshell
JSch 是一个很好用的库。 它对你的问题有一个非常简单的答案。
找到完整的代码
您可以在http://faisalbhagat .blogspot.com/2013/09/java-uploading-file-remotely-via-scp.html
JSch is a nice library to work with. It has quite an easy answer for your question.
You can find complete code at
http://faisalbhagat.blogspot.com/2013/09/java-uploading-file-remotely-via-scp.html
-:如果您使用 Maven 进行依赖项管理,请稍微改进 Fernando 的答案:-
pom.xml:
在您的项目中添加此依赖项。 最新版本可以在此处找到。
Java代码:
-: Refining Fernando's answer a little, if you use Maven for dependency management :-
pom.xml:
Add this dependency in your project. Latest version can be found here.
Java code:
我写了一个 scp 服务器,它比其他服务器容易得多。 我使用 Apache MINA 项目(Apache SSHD)来开发它。 您可以在这里查看:https://github.com/boomz/JSCP
您也可以从
/jar
目录下载 jar 文件。如何使用? 看一下: https://github.com/boomz/JSCP/ blob/master/src/Main.java
I wrote an scp server which is much easier than others. I use Apache MINA project (Apache SSHD) to develop it. You can take a look here: https://github.com/boomz/JSCP
Also you can download the jar file from
/jar
directory.How to use? Take a look on: https://github.com/boomz/JSCP/blob/master/src/Main.java
我需要递归复制文件夹,在尝试不同的解决方案后,最终以 ProcessBuilder + Expect/spawn 结束
I need to copy folder recursively, after trying different solutions, finally end up by ProcessBuilder + expect/spawn