SFTP到没有密码/密钥对的远程位置

时间:2014-05-14 09:35:24

标签: passwords sftp jsch apache-commons-vfs

我们正在尝试在基于Spring的环境中提供SFTP适配器,以便将文件从本地传输到本地或远程服务器。但是,我们没有为远程位置的用户配置任何密码。所有实现,如apache-commons VFS或Jsch都需要密码或私钥对来进行文件传输。我们现在无法为用户配置密码,因为在我们获得用户信息的其他API中需要进行多次更改。

您如何建议我们解决这个问题?

2 个答案:

答案 0 :(得分:2)

出于自动目的,您可以使用SFTP / SSH而无需任何密码。 2种方式,您的选择。

1 - 创建一个密钥对,其中密钥的密码为空。使用ssh-keygen:

$ ssh-keygen -f myInsecureKey

当它提示秘密(私人)密钥密码(密码)时,只需点击返回。然后获取公钥(myInsecureKey.pub)并将其发送到服务器,进入远程帐户主目录中的.ssh目录。必须将其命名为“authorized_keys”,如果已存在,请附加新密钥(使用编辑器查看您正在执行的操作)。但要注意,你的秘密密钥现在已经完全裸露了,所以你应该调整权限或者保护它的东西。

2 - 使用'代理商'使用常规SSH密钥对。它有点牵扯,但是一旦你开始它,它很酷,非常适合交互式使用。在unix / mac上,命令ssh-agent将在客户端计算机上运行个人密钥服务器。它创建了一些您需要获取的shell命令。像这样:

$ ssh-agent>的〜/ .ssh / .myAgentContactInfo

$ source~ / .ssh / .myAgentContactInfo

每个shell必须完成最后一步才能使用代理;把它放在你的.profile中,这样你打开的新外壳窗口就可以了。我认为每个用户都需要自己的代理。

然后用任何密钥加载它:  $ ssh-add mySecretKey 该步骤将要求您的密钥密码,但在此之后,您将无密码。

这两种方法都适用于ssh和sftp,也许可以使用ssh库(我从未尝试过它们)。

答案 1 :(得分:0)

我不明白如何在没有使用用户登录名和密码进行身份验证的情况下执行SFTP。 用户可能有一个空密码。

使用JSch,您可以使用StrictHostKeyChecking

final int PORT = 22;
// Server belongs to the model
Server server = new Server("root", "password");
JSch client = new JSch();
Session session = client.getSession(server.getLogin(), server.getAddress(), PORT);
// This is the important line!
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(server.getPassword());