- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目前我正在使用 apache vfs2 从 sftp 下载文件。对于身份验证,我使用用户名和密码。
有没有办法在没有密码的情况下仅使用公钥-私钥来使用 vfs2?
我想我已经使用了这个功能,但是如何使用呢?仅将其设置为"is"?
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(options, "no");
这是我当前的代码(片段):
private boolean downloadFile(){
StandardFileSystemManager sysManager = new StandardFileSystemManager();
//download der Datei
try {
sysManager.init();
FileObject localFile = sysManager.resolveFile(localFilePath);
FileObject remoteFile = sysManager.resolveFile(createConnectionString(host, user, password, fileName, port),createDefaultOptions());
//Selectors.SELECT_FILES --> A FileSelector that selects only the base file/folder.
localFile.copyFrom(remoteFile, Selectors.SELECT_FILES);
} catch (Exception e) {
logger.error("Downloading file failed: " + e.toString());
return false;
}finally{
sysManager.close();
}
return true;
}
和
private FileSystemOptions createDefaultOptions() throws FileSystemException{
//create options for sftp
FileSystemOptions options = new FileSystemOptions();
//ssh key
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(options, "no");
//set root directory to user home
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(options, true);
//timeout
SftpFileSystemConfigBuilder.getInstance().setTimeout(options, timeout);
return options;
}
最佳答案
获取您的代码并将其包装到一个可运行的示例中。注意 IdentityInfo
实现。这可以通过更改明显的行来使用带密码的 key 。
$ javac -cp 'jsch-0.1.51.jar;commons-vfs2-2.0.jar' SftpGet.java
$ java -cp 'jsch-0.1.51.jar;commons-vfs2-2.0.jar;commons-logging-1.1.1.jar;.' SftpGet
与
import java.io.File;
import com.jcraft.jsch.UserInfo;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.Selectors;
import org.apache.commons.vfs2.impl.StandardFileSystemManager;
import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
import org.apache.commons.vfs2.provider.sftp.IdentityInfo;
public class SftpGet {
public static void main(String[] args) {
downloadFile();
}
private static boolean downloadFile(){
String host = "HOSTNAMEHERE";
String user = "USERNAMEHERE";
String password = "";
String fileName = "/lines.txt";
String localFilePath = "c:/cygwin64/home/woddle/wrote_lines.txt";
// without passphrase
String keyPath = "c:/cygwin64/home/woddle/.ssh/id_dsa_nopass";
String passphrase = null;
// with passphrase
// String keyPath = "c:/cygwin64/home/woddle/.ssh/id_dsa_withpass";
// String passphrase = "super-secrets";
StandardFileSystemManager sysManager = new StandardFileSystemManager();
//download der Datei
try {
sysManager.init();
FileObject localFile = sysManager.resolveFile(localFilePath);
FileObject remoteFile = sysManager.resolveFile(createConnectionString(host, user, password, keyPath, passphrase, fileName), createDefaultOptions(keyPath, passphrase));
//Selectors.SELECT_FILES --> A FileSelector that selects only the base file/folder.
localFile.copyFrom(remoteFile, Selectors.SELECT_FILES);
} catch (Exception e) {
System.out.println("Downloading file failed: " + e.toString());
return false;
}finally{
sysManager.close();
}
return true;
}
public static String createConnectionString(String hostName, String username, String password, String keyPath, String passphrase, String remoteFilePath) {
if (keyPath != null) {
return "sftp://" + username + "@" + hostName + "/" + remoteFilePath;
} else {
return "sftp://" + username + ":" + password + "@" + hostName + "/" + remoteFilePath;
}
}
private static FileSystemOptions createDefaultOptions(final String keyPath, final String passphrase) throws FileSystemException{
//create options for sftp
FileSystemOptions options = new FileSystemOptions();
//ssh key
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(options, "no");
//set root directory to user home
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(options, true);
//timeout
SftpFileSystemConfigBuilder.getInstance().setTimeout(options, 10000);
if (keyPath != null) {
IdentityInfo identityInfo = null;
if(passPhrase!=null){
identityInfo = new IdentityInfo(new File(keyPath), passPhrase.getBytes());
}else{
identityInfo = new IdentityInfo(new File(keyPath));
}
SftpFileSystemConfigBuilder.getInstance().setIdentityInfo(options, identityInfo);
}
return options;
}
}
关于java - 如何将 apache vfs2 用于带有公私钥且没有密码的 sftp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28430315/
我正在尝试使 Spring 4.0.2 作为 JBoss 7 模块运行。当我部署 war 文件时出现以下错误 Caused by: java.lang.IllegalStateException: C
本文分享自华为云社区《鸿蒙轻内核M核源码分析系列二一 01 虚拟文件系统VFS》,作者:zhushy 。 VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,
我正在关注 AWS 教程 Build a Modern Web Application - [Python] . 我在 模块 2B:使用 AWS Fargate 部署服务 @步 B:本地测试服务 我成
我在 WSO2 VFS 系统上遇到了一个小问题。我有一个简单的入站端点,每 5 秒扫描一个文件夹以读取 CVS 文件。我想处理文件名不是预期文件名的情况。我通过错误序列解决了这个问题,但仍然遇到了技术
出于安全原因,我需要一个 SQLite 实现来允许我在磁盘上加密 db 文件。我注意到 SQLite 只适用于常规文件,并且没有支持可用流的实现(奇怪的是,因为很多人似乎都想要一个)。如果我有这样的实
我的代码中有 org.apache.commons.vfs.FileObject,任务完成后我需要删除该文件。其中FileObject有delete()方法。但它会抛出 FileSystemExcep
当我们在 linux 终端上发出命令时。由此创建的进程遍历到 VFS 层,在那里它决定调用哪个文件系统函数,如 ext4、ext3 或任何其他文件系统。所以我的问题是 VFS 如何区分文件系统?从 V
本文整理了Java中org.reflections.vfs.ZipDir类的一些代码示例,展示了ZipDir类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平
我正在研究将Apache Commons VFS用于需要通过ftp,sftp和https在本地服务器和远程服务器之间传输文件的项目。 标准用法示例是从静态方法获取FileSystemManager。
下面代码的问题是VFS似乎无法持久化字节数组。当 Xodus VFS 写入零字节时: @Override public FileModel put( String appId, S
我尝试使用相对路径通过 Apache VFS 获取文件夹的父级,但我得到“无效的相对路径” public static void main(String[] args) throws Exceptio
我将我的 Web 应用程序从 JBOSS 5 升级到 JBOSS 7。在我的 Web 应用程序中,为了获取包含特定文件的 jar,我使用了以下代码行。 static final Pattern _UR
我刚刚发现 VFS 作为访问 sftp 的一种方式。似乎可行,但所有示例均假设本地文件;相反,我的数据存储在内存中。我只看到一个方法 copyFrom(FileObject),没有接受流或缓冲区的重载
我对 Commons VFS 有疑问。我想使用 SFTP 连接到一个目录并列出它。这是代码: FileSystemOptions opts = new FileSystemOptions(); Sft
我是 samba 开发的新手;在当前任务中,我想为 Samba 设计一个 VFS 层。我想捕获一些基本文件操作并将其定向到自定义库支持的 API。我以 vfs_ceph 为例;但它似乎与当前的 sam
我正在尝试使用 commons-vfs 作为文件系统包装器,以便更轻松地对一些需要接触文件系统的代码进行单元测试。现在我只是熟悉 API。我想做的是创建一个虚拟文件系统,并添加几个文件(一个文件夹,然
我是 hadoop 的新手,我正在使用 apache hadoop 1.0.3 并使用 redhat linux 6.0 vm,而我正在尝试从本地 windows 加载示例文件7 到 Hadoop“H
我将多媒体文件及其元数据存储在 RDBMS 中(实际上,实际的媒体文件存储在 FS 中,但我们不谈这个)。 我想提供此信息的文件系统 View ,以便用户可以使用 Windows 资源管理器和类似的东
我正在尝试学习如何使用 Apache Commons VFS2。 我已经阅读了我能找到的所有文档,并且我已经有点熟悉 API,但仍有一件事我不是很清楚。 Cache机制是如何工作的?特别是: 我不明白
我尝试处理的问题是保存大量(数百万)个通过网络发送的小文件(最多 50KB)。保存是按顺序完成的:服务器接收到一个文件或目录(通过网络),并将其保存在磁盘上;下一个到达,它被保存等。显然,如果多个服务
我是一名优秀的程序员,十分优秀!