
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 の場合。これで編集を開始できるようになります。私なら次の操作を行います。
- 1つの[偽の]ファイルだけをリストする
readdir()
- ファイルシステムからユーザー名を見つける方法を理解する
- Hotwire
open()
からユーザー名を使用して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
これをバックグラウンドのどこかで実行したままにしておきます。ディレクトリにアクセスするたびに、Web サイトからファイルを更新します。echo blaaa $DIR
サーバーに負荷がかかっていないことを確認するために、( で) チェックすることをお勧めします。ディレクトリを初めてロードするときには、ファイルが表示されない場合があります。