我只需要使用没有密码的用户名连接SFTP主机。有没有带有avove功能的Java客户端?请分享
答案 0 :(得分:0)
Apache Commons VFS可以与SFTP一起使用。
String user="your username";
String url="your domain/path/fileName";
StandardFileSystemManager manager = new StandardFileSystemManager();
try {
manager.init();
String sftpUri = "sftp://" + user + "@" + url;
manager.addProvider("ram-ext", new RamFileProvider());
RamFileObject localFile = (RamFileObject)manager.resolveFile("ram-ext:///root/file.txt");
try(OutputStream out = localFile.getOutputStream()){
//TODO:write to the outputStream
}
// Create remote file object
FileObject remoteFile = manager.resolveFile(sftpUri,createDefaultOptions());
// Copy local file to sftp server
remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);
}
catch(Exception ex) {
ex.printStackTrace();
}
finally {
manager.close();
}
public static FileSystemOptions createDefaultOptions() throws FileSystemException {
// Create SFTP options
FileSystemOptions opts = new FileSystemOptions();
// SSH Key checking
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
/*
* Using the following line will cause VFS to choose File System's Root
* as VFS's root. If I wanted to use User's home as VFS's root then set
* 2nd method parameter to "true"
*/
// Root directory set to user home
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, false);
// Timeout is count by Milliseconds
SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);
return opts;
}
答案 1 :(得分:0)
您不是要创建会话,
尝试使用此代码。还要检查端口号是否正确,有时可能与22
不同。
private static final String SFTP_HOST = "100.100.100.100"; // SFTP Host Name or SFTP Host IP Address
private static final int SFTP_PORT = 22; // SFTP Port Number
private static final String SFTP_USERNAME = "root"; // User Name
public void login() throws Exception {
Channel channel = null;
try {
JSch jsch = new JSch();
Session m_Session = jsch.getSession(SFTP_USERNAME, SFTP_HOST, SFTP_PORT);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
m_Session.setConfig(config);
m_Session.connect(); // Create SFTP Session
channel = m_Session.openChannel("sftp");
channel.connect();
ChannelSftp m_channelSftp = (ChannelSftp) channel;
} catch (Exception e) {
e.printStackTrace();
}
}