SFTP 服务器使用 HTTPS 文件进行响应

SFTP 服务器使用 HTTPS 文件进行响应

我有一个 HTTPS 的 REST-API 服务器。我需要一种在使用 SFTP 检索文件时调用 API 的方法。内容是每个请求动态生成的。有没有一种简单的方法可以做到这一点,而不必添加用户帐户并在服务器上引入安全漏洞?拥有密钥将允许任何人获取文件的内容,但仅此而已。

这就是我所拥有的:

GET https://myservice/api/items/get?key=XXXX

这样做将返回相同的结果:

sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)

答案1

思考我明白你的意思。你想根据当前用户(或请求的文件)生成文件。你目前通过 HTTPS 执行此操作,但你还想通过 SFTP 提供它... 对吗?有趣的问题。

您可能会感到震惊,我认为没有任何东西可以满足您的要求......但一切皆有可能。


我的第一个方法是编写您自己的文件系统!

我会从 FUSE 开始。此外,还有 python-fuse。以下是我用过的唯一教程对于 FUSE。它将带您到达可以开始编辑内容的地步。我会:

  • 让它只列出一个[假]文件readdir()
  • 弄清楚如何从文件系统中找到用户名
  • Hotwireopen()并使用用户名read()从中提取requests.get('your URL')open()可能只需要伪造并read()处理请求requests
  • 你可能需要修补和伪造许多其他方法,以便它们返回数据,但显然大多数情况下都是伪造的
  • 将此 FUSE 文件系统挂载到 SFTP 中的某个位置,每个人都可以将其视为只读

这对于任何一种 sftp 方法都有效(例如,您可以查看完整路径而不是用户),但您需要一个人们可以登录的单个 sftp 帐户。


或者,如果每个用户都有一个帐户,您可以尝试监视每个用户拥有的目录的访问。inotifywatch并且inotifywait可以让您监视对目录的访问。

inotifywait -mrq --format '%w' /home/*/magicdir/ | while read DIR; do
    user=${DIR:6:-10}  # that is based on the length of /home/ and /magicdir/
    wget -qO $DIR https://path/to/items/${user}
done

并让它在后台运行。每次他们访问目录时,它都会从网站更新文件。您可能需要检查它(使用echo blaaa $DIR)以确保它不会破坏服务器。他们第一次加载目录时,它可能不会显示文件。

相关内容