[英]Secure FTP with org.apache.commons.net.ftp.FTPClient
Is there a way I can implement a secure FTP with org.apache.commons.net.ftp.FTPClient
? 有没有办法用
org.apache.commons.net.ftp.FTPClient
实现安全的FTP?
If not, what are other options for Java? 如果没有,Java的其他选项有哪些?
First, make sure you understand a difference between FTPS (Secure FTP) and SFTP: 首先,确保您了解FTPS(安全FTP)和SFTP之间的区别:
FTPS versus SFTP versus SCP FTPS与SFTP对比SCP
If you need FTPS (aka Secure FTP or FTP over TLS/SSL), you can use FTPSClient
class from Apache Commons library instead of FTPClient
. 如果您需要FTPS (也就是安全FTP或FTP over TLS / SSL),您可以使用Apache Commons库中的
FTPSClient
类而不是FTPClient
。
If you need SFTP (over SSH), see: 如果您需要SFTP (通过SSH),请参阅:
How to retrieve a file from a server via SFTP? 如何通过SFTP从服务器检索文件? or
要么
Java SFTP Transfer Library Java SFTP传输库
You can use org.apache.commons.net.ftp. 您可以使用org.apache.commons.net.ftp。 FTPSClient instead of org.apache.commons.net.ftp.
FTPSClient而不是org.apache.commons.net.ftp。 FTPClient to have secure ftp http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html
FTPClient具有安全ftp http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html
Try Java Secure Channel 尝试Java安全通道
It supports SFTP 它支持SFTP
Apache FTPClient doesn't support SFTP at the moment. Apache FTPClient目前不支持SFTP。 However, you can use JSch - Java Secure Channel.
但是,您可以使用JSch - Java安全通道。
Onkar Joshi goes into more details of the library to use for FTP, SFTP, FTPS file transfer in Java. Onkar Joshi详细介绍了用于FTP,SFTP,Java中FTPS文件传输的库。
An example of using JSch to transfer files with SFTP is as follows: 使用JSch与SFTP传输文件的示例如下:
...
private static final Logger logger = Logger.getLogger(YourClass.class.getName());
public boolean sendDataViaSFTP(String contents) throws Exception {
String hostname = "<FTP hostname/IP>";
String username = "<FTP username>";
String password = "<FTP password>";
String remoteDirectory = "<FTP remote directory>";
int ftpPort = 22;
logger.info("*** Creating FTP session. ***");
JSch jsch = new JSch();
Session session = null;
Channel channel = null;
ChannelSftp c = null;
//Now connect and SFTP to the SFTP Server
try {
//Create a session sending through our username and password
session = jsch.getSession(username, hostname, ftpPort);
logger.info("*** FTP Session created. ***");
session.setPassword(password);
//Security.addProvider(new com.sun.crypto.provider.SunJCE());
//Setup Strict HostKeyChecking to no so we dont get the
//unknown host key exception
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
logger.info("*** Session connected. ***");
//Open the SFTP channel
logger.info("*** Opening FTP Channel. ***");
channel = session.openChannel("sftp");
channel.connect();
c = (ChannelSftp) channel;
//Change to the remote directory
logger.info("*** Changing to FTP remote dir: " + remoteDirectory + " ***");
c.cd(remoteDirectory);
//Send the file we generated
try {
String filename = "myfile.txt";
logger.info("*** Storing file as remote filename: " + filename + " ***");
ByteArrayInputStream bis = new ByteArrayInputStream(contents.getBytes());
c.put(bis, filename);
return true;
} catch (Exception e) {
logger.info("*** Storing remote file failed. " + e.toString() + " ***");
throw e;
}
} catch (Exception e) {
logger.info("*** Unable to connect to FTP server. " + e.toString() + " ***");
throw e;
} finally {
//
//Disconnect from the FTP server
//
try {
if(session != null)
session.disconnect();
if(channel != null)
channel.disconnect();
if(c != null)
c.quit();
} catch (Exception exc) {
logger.severe("*** Unable to disconnect from FTP server. " + exc.toString()+" ***");
}
logger.info("*** SFTP Process Complete. ***");
}
}
...
How about trying Apache Camel, 怎么样尝试Apache Camel,
http://camel.apache.org/ftp2.html http://camel.apache.org/ftp2.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.