
Ich habe einen REST-API-Server per HTTPS. Ich brauche eine Möglichkeit, die API aufzurufen, wenn eine Datei per SFTP abgerufen wird. Der Inhalt wird dynamisch pro Anfrage generiert. Gibt es eine einfache Möglichkeit, dies zu tun, ohne Benutzerkonten hinzufügen und Sicherheitslücken auf dem Server verursachen zu müssen? Mit dem Schlüssel kann jeder auf den Inhalt der Datei zugreifen, sonst aber nichts.
Das ist, was ich habe:
GET https://myservice/api/items/get?key=XXXX
und wenn Sie dies tun, erhalten Sie dasselbe Ergebnis:
sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)
Antwort1
ICHdenkenIch verstehe, was Sie meinen. Sie möchten eine Datei basierend auf dem aktuellen Benutzer (oder der angeforderten Datei) generieren. Sie tun das derzeit über HTTPS, möchten es aber auch über SFTP verfügbar machen ... Richtig? Interessantes Problem.
Sie werden vielleicht schockiert sein, wenn Sie meinen, dass es kein sofort einsatzbereites Produkt gibt, das Ihren Anforderungen entspricht... Aber möglich ist alles.
Mein erster Ansatz besteht darin, Ihr eigenes Dateisystem zu schreiben!
Ich würde mit FUSE beginnen. Außerdem python-fuse. Hier istdas einzige Tutorial, das ich je benutzt habefür FUSE. Damit gelangen Sie an den Punkt, an dem Sie mit der Bearbeitung beginnen können. Ich würde:
- Lassen Sie es nur eine [gefälschte] Datei auflisten in
readdir()
- Finden Sie heraus, wie Sie den Benutzernamen im Dateisystem finden
- Hotwire
open()
undread()
zum Abrufen von einemrequests.get('your URL')
mithilfe des Benutzernamens.open()
Muss möglicherweise nur gefälscht werden undread()
ein Handle für dierequests
Anforderung sein. - Sie müssen wahrscheinlich viele der anderen Methoden flicken und manipulieren, damit sie Daten zurückgeben, aber diese werden offensichtlich meistens gefälscht sein
- Mounten Sie dieses FUSE-Dateisystem an einer Stelle in Ihrem SFTP, die für alle schreibgeschützt ist
Dies würde für beide SFTP-Ansätze funktionieren (Sie könnten beispielsweise statt des Benutzers den vollständigen Pfad ansehen), Sie benötigen jedoch ein einzelnes SFTP-Konto, mit dem sich die Benutzer anmelden können.
Wenn jeder Benutzer über ein Konto verfügt, können Sie alternativ versuchen, den Zugriff auf ein Verzeichnis zu überwachen, das jedem Benutzer gehört. inotifywatch
So inotifywait
können Sie den Zugriff auf ein Verzeichnis überwachen.
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
Und lassen Sie das irgendwo im Hintergrund laufen. Es aktualisiert die Datei von der Website jedes Mal, wenn auf das Verzeichnis zugegriffen wird. Sie sollten es (mit einem echo blaaa $DIR
) überprüfen, um sicherzustellen, dass es den Server nicht überlastet. Es kann sein, dass eine Datei beim ersten Laden des Verzeichnisses nicht angezeigt wird.