使用java连接到SFTP
我需要帮助连接到SFTP服务器?有人有工作代码吗?使用java连接到SFTP
,我发现这样的事情
package test.JSch;
import com.jcraft.jsch.*;
public class TestJSch {
public static void main(String args[]) {
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession("USSERNAME", "HOST", 22);
//session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("PASSWORD");
System.out.println("1");
session.connect();
System.out.println("2");
Channel channel = session.openChannel("sftp");
System.out.println("3");
channel.connect();
System.out.println("4");
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("remotefile.txt", "localfile.txt");
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (SftpException e) {
e.printStackTrace();
}
}
}
但这是输出
com.jcraft.jsch.JSchException: java.net.ConnectException: Connection timed out: connect
at com.jcraft.jsch.Util.createSocket(Util.java:258)
at com.jcraft.jsch.Session.connect(Session.java:186)
at com.jcraft.jsch.Session.connect(Session.java:145)
at test.JSch.TestJSch.main(TestJSch.java:17)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.jcraft.jsch.Util.createSocket(Util.java:252)
... 3 more
什么是错的代码?
这是*的一个早期问题,接受的答案建议使用JSch library。
How to retrieve a file from a server via SFTP?
我看到你试图通过JSch连接并得到了一个错误。
我建议首先要检查您是否可以从客户端(您正在测试您的程序的同一台计算机)连接到sftp计算机,使用标准的sftp客户端(如Windows上的Filezilla)或者仅仅是sftp
命令在* nix系统中的终端上。
您可以使用Apache commons VFS
FileSystemManager fsManager = VFS.getManager();
FileObject remoteFile = fsManager.resolveFile("sftp://myusername:[email protected]/pub/downloads/somefile.tgz");
InputStream in = remoteFile.getContent().getInputStream();
VFS不是一大堆不同类型的文件管理工具,它们都依赖于其他几个jar文件?如果OP只需要SFTP部分,那么VFS会有点过分。 – deltaforce2 2011-06-09 12:37:28
它看起来已经过时 – Njax3SmmM2x2a0Zf7Hpd 2013-12-16 17:17:33
http://code.google.com/p/otrosvfsbrowser/正在使用Apache Commons VFS ver.2浏览包括SFTP在内的远程文件系统。它工作得很好。 – KrzyH 2013-12-18 11:40:21
JSch API:session.connect(); 再次询问用户名和密码连接到服务器,即使这些作为参数传递。
如何使代码避免再次询问用户名和密码。
当你说它不起作用时,你可以更具体吗?你有什么异常?它是否编译?你在用什么库? – 2011-06-09 09:22:09