ファイル名を隠蔽しつつファイル名を保存してPiping Server経由で転送するときの小技
#Piping_Server
やりたいこと
例えば、my-secret-dataset.datというファイルを転送したいとする。なおかつこのファイル名も同時に送りたい。
curl -T my-secret-dataset.dat https://ppng.io/mydataと転送するとmy-secret-dataset.datというファイル名の情報を受信側に渡らない。
curl -T my-secret-dataset.dat https://ppng.ioとするかcurl -T my-secret-dataset.dat https://ppng.io/my-secret-dataset.datとすれば受信者側が必ず正しい名前で受け取ることを保証できる。だが長くて冗長で打ち間違えのストレスがある。
また、サーバー上でリクエストをログを取っている場合パスがログに残る可能性がある。ファイル名が分かったところでそれほど問題がないことは多いがなるべくサーバーに渡る情報を最小限にしたい。
これらのことを解決したい。
やりかた
前置きは長いがやり方はシンプル。
以下のように送信すればよい。tar cをファイル名の前につけるだけですごく簡単。
$ tar c my-secret-dataset.dat | curl -T - https://ppng.io/mydata
関連:「tarコマンドは「tar c ./mydir > mydir.tar」でtarが作れるのではないかという話」
ファイル一つに対してtarコマンドを適用することでそのファル名を保存しつつPiping Serverのパスにはファイル名の情報が乗らなくなり情報を最小限に抑えることができる。
E2E暗号化してデータ自体も暗号化したければ、gpgコマンドやopensslコマンドをtarの後にパイプで繋げることができる。