为 Java 客户端设置 SFTP 服务器以仅允许使用公钥下载

Posted

技术标签:

【中文标题】为 Java 客户端设置 SFTP 服务器以仅允许使用公钥下载【英文标题】:Setting up SFTP Sever for Java client to allow downloads with public key only 【发布时间】:2016-04-10 08:34:35 【问题描述】:

我想使用公钥和私钥加密设置安全 FTP 服务器。 Java 程序将从该服务器上载和下载文件。我是否需要两对密钥,一对用于上传,一对用于上传,一对用于下载?

我需要支持两个操作。

    Java 客户端(私钥) ----------------- 上传文件 ----------- 服务器(公钥) 生成的密钥客户

    Java 客户端(公钥)-------- 下载文件 --------- 服务器(私钥) 生成的密钥在服务器上

可以使用单对密钥来完成吗?

【问题讨论】:

为什么需要引入第二对? sftp i ftps 协议也解决了这个问题 【参考方案1】:

首先,您可能指的是 SFTP,而不是安全 FTP (FTPS)。


您似乎误解了 FTPS 中的公钥身份验证的工作原理。

你不能只用公钥做任何事情。你也总是需要私钥。即使是下载。任何 SFTP 会话都是双向的。你总是需要向服务器发送一些东西(至少是 SFTP/SSH 请求),并且它们需要用私钥加密。


回答您的问题:是的,您需要两个密钥对。或者更确切地说,您需要两个 SFTP/SSH 帐户。


要使用仅用于下载的公钥,您将需要使用普通 FTP 并使用密钥对仅对文件进行加密/解密。但这不再是 SFTP。

【讨论】:

【参考方案2】:

连接是双向的 - 您可以通过单一连接随意上传和下载。

话虽如此,一个连接中有两个密钥对:客户端的和服务器的。服务器将其公钥提供给客户端,以验证您正在与正确的服务器交谈。客户端公钥被添加到服务器上的授权密钥列表中。

【讨论】:

以上是关于为 Java 客户端设置 SFTP 服务器以仅允许使用公钥下载的主要内容,如果未能解决你的问题,请参考以下文章

为EC2 Amazon Linux实例设置SFTP Sublime Text 3

linux SFTP用户创建 不允许用户登录,并且连接只允许在制定的目录下进行操作

设置Paramiko模块的sftp.get()的时间限制

用java写一个sftp客户端程序 能够上一个sftp的目录下载文件到本地指定目录

JAVA SFTP文件上传下载及批量下载

如何在java中通过SFTP传输文件? [复制]