【问题标题】:SFTP to a remote location without a password/key pairSFTP 到远程位置,无需密码/密钥对
【发布时间】:2014-05-14 09:35:24
【问题描述】:

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

您建议我们如何解决它?

【问题讨论】:

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

标签: passwords sftp jsch apache-commons-vfs


【解决方案1】:

您无需任何密码即可使用 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 中,这样你打开的新 shell 窗口就可以了。我认为每个用户都需要自己的代理。

然后你用任何密钥加载它: $ ssh-add mySecretKey 该步骤将要求您提供安全密钥密码,但在那之后,您就没有密码了。

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

【讨论】:

    【解决方案2】:

    我不明白您如何在不使用用户登录名和密码进行身份验证的情况下执行 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-11
      • 2013-09-05
      • 2016-10-29
      • 2016-10-11
      • 1970-01-01
      • 2021-09-28
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多