Passwords SFTP到远程位置,无需密码/密钥对

Passwords SFTP到远程位置,无需密码/密钥对,passwords,sftp,jsch,apache-commons-vfs,Passwords,Sftp,Jsch,Apache Commons Vfs,我们正在尝试在基于Spring的环境中提供SFTP适配器,以便将文件从本地传输到本地或远程服务器。但是,我们没有为远程位置的用户配置任何密码。像ApacheCommonsVFS或Jsch这样的所有实现都需要密码或私钥对来进行文件传输。我们现在无法为用户配置密码,因为这需要在我们获取用户信息的其他API中进行多次更改 你认为我们该如何应对 我不明白,如果不使用用户登录和密码进行身份验证,您怎么能进行SFTP。 但用户可能有一个空密码 使用JSch,您可以使用strichHostKeyCheckin

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


你认为我们该如何应对

我不明白,如果不使用用户登录和密码进行身份验证,您怎么能进行SFTP。 但用户可能有一个空密码

使用JSch,您可以使用
strichHostKeyChecking

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());

出于自动化目的,您可以在不需要任何密码的情况下使用SFTP/SSH。两种方式,你的选择

1-制作密钥对,其中密钥具有空白密码。使用ssh-keygen:

$ssh keygen-f myunsecurekey

当它提示输入秘密(私钥)密码短语(password)时,只需点击return。然后获取公钥(mysecurekey.pub)并将其发送到服务器,放入远程帐户主目录中的.ssh目录中。必须将其命名为“authorized_keys”,如果它已经存在,请附加新密钥(使用编辑器查看您正在执行的操作)。不过,请注意,您的密钥现在是完全裸露的,因此您应该调整权限或其他内容来保护它

2-使用具有常规SSH密钥对的“代理”。它有点复杂,但一旦你开始使用它,它就很酷,非常适合交互使用。在unix/mac上,ssh代理命令将在您的客户机上运行个人密钥服务器。它会产生一些您需要源代码的shell命令。像这样:

$ssh-agent>~/.ssh/.myAgentContactInfo

$source~/.ssh/.myAgentContactInfo

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

然后你把所有的秘密钥匙都装进去: $ssh添加mySecretKey 这一步需要你的sec密钥密码,但在那之后,你就没有密码了


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

听起来您的文件服务器正在使用FTP进行匿名访问。SFTP是“安全的”文件传输协议,因此它必须是安全的。您在同一台服务器上设置了SFTP服务,您的其他应用仍然可以使用FTP访问。只有通过SFTP连接的系统才需要密钥对。