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 提供它...對嗎?有趣的問題。

您可能會感到震驚,因為我認為沒有任何東西可以滿足您開箱即用的要求……不過,一切皆有可能。


我的第一個方法是編寫自己的檔案系統!

我會從保險絲開始。此外,python-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)以確保它不會對伺服器造成影響。第一次載入目錄時可能不會顯示檔案。

相關內容