# ファイルを送信 — パスワード自動生成、リンクとパスワードを表示 $ ttl send secret.pdf No password provided. Generate one? [Y/n]: Generated password: aB3kL9mX ·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB) IMPORTANT! Save your password — required to download and decrypt the file. Password: aB3kL9mX https://ttl.space/aBcDeFgHiJ # ダウンロード — パスワードを対話的に入力 $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
CLIが暗号化、アップロード、ダウンロード、復号を処理します。サーバーがパスワードや平文データを見ることはありません。
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# お使いのプラットフォーム用をリリースページからダウンロード $ curl -Lo ttl.tar.gz \ https://github.com/tweenietomatoes/ttl/releases/latest/download/ttl_linux_amd64.tar.gz $ tar xzf ttl.tar.gz && sudo mv ttl /usr/local/bin/
$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest
$ git clone https://github.com/tweenietomatoes/ttl $ cd ttl && go build -o ttl ./cmd/ttl/ $ sudo mv ttl /usr/local/bin/
$ ttl version ttl v1.3.0
# パスワード自動生成、デフォルト7日間のTTL $ ttl send report.xlsx
ターミナルでパスワードが指定されていない場合、CLIは次のように確認します:
No password provided. Generate one? [Y/n]:
Enterキーを押すか y と入力すると自動生成されます。
$ ttl send -p mySecretPass -t 1h document.pdf
# 最初のダウンロード後にファイルが完全に削除されます $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # 5分で期限切れ $ ttl send -t 30m meeting-link.txt # 30分で期限切れ $ ttl send -t 6h backup.tar.gz # 6時間で期限切れ $ ttl send -t 1d daily-report.pdf # 1日で期限切れ $ ttl send -t 3d project-archive.zip # 3日で期限切れ $ ttl send -t 5d design-assets.zip # 5日で期限切れ $ ttl send report.xlsx # 7日で期限切れ(デフォルト)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
パスワードは安全に読み取られ、ターミナルに表示されません。元のファイル名が復元されます。
# 完全なURLの代わりに10文字のトークンだけで使用できます $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
デフォルトでは、ファイルは現在のディレクトリに保存されます。別のディレクトリを指定するには -o / --output を使用してください。
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
リンクを直接開くことで、ブラウザでもファイルのダウンロードと復号ができます。Webインターフェースは同じ暗号化ライブラリを使用し、パスワードの入力を求めます。ソフトウェアのインストールは不要です。
パスワードは暗号化鍵のシードです。デバイスの外に送信されることはなく、サーバーに送られることもありません。指定方法は5通りあります:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
[0-9A-Za-z] から暗号学的にランダムな8文字のパスワードを生成します。ターミナルでの send 時のみ利用可能です。
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
パスワードは表示されず、シェル履歴にも保存されません。send 時はまず自動生成するかどうかを選択します。get 時は直接入力を求められます。
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password は ps aux の出力に表示され、シェル履歴(~/.bash_history)に保存される場合があります。共有環境やスクリプトでの使用は避けてください。代わりに --password-stdin または --password-file を使用してください。--password-stdin# echoからパイプ $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # パスワードマネージャーからパイプ $ pass show ttl/key | ttl send --password-stdin data.zip # 環境変数からパイプ $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # ヒアドキュメント $ ttl send --password-stdin report.pdf <<<"mySecretPass"
stdinの最初の行を読み取ります。スクリプト、CI/CDパイプライン、自動化に便利です。stdinがターミナルでなく、パスワードソースが指定されていない場合、CLIはエラーで終了します(--json使用時を除く — その場合パスワードは自動生成されます)。
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
ファイルの最初の行を読み取ります(末尾の改行は除去)。Dockerシークレット(/run/secrets/)、Vaultエージェントファイルなどのパターンと互換性があります。
ttl.password明示的なパスワードが指定されない場合、CLIはバイナリの隣にあるttl.passwordファイル、次に~/.ttl/passwordを検索します。最初の行がパスワードとして使用されます。
-p / --password、--password-stdin、--password-fileは組み合わせられません。自動検出されるttl.passwordファイルは、これらが何も指定されていない場合のみ確認されます。最小長: 8文字。| フラグ | 説明 | デフォルト |
|---|---|---|
-p, --password P | 暗号化パスワード | 対話的入力 |
--password-stdin | 標準入力からパスワードを読み取り | |
--password-file F | ファイルからパスワードを読み取り | |
-t, --ttl DUR | 有効期限 | 7d |
-b, --burn | 閲覧後に消滅(1回のみダウンロード可能) | オフ |
--timeout DUR | 転送タイムアウト | 自動 |
--server URL | サーバーURL | https://ttl.space |
-h3, --http3 | HTTP/3(QUIC)を試行、TCPにフォールバック | オフ |
--json | JSON出力をstdoutに書き出し(スクリプトとAIエージェント向け) | オフ |
| フラグ | 説明 | デフォルト |
|---|---|---|
-p, --password P | 復号パスワード | 対話的入力 |
--password-stdin | 標準入力からパスワードを読み取り | |
--password-file F | ファイルからパスワードを読み取り | |
-o, --output DIR | 出力ディレクトリ | 現在のディレクトリ |
--timeout DUR | 転送タイムアウト | 自動 |
-h3, --http3 | HTTP/3(QUIC)を試行、TCPにフォールバック | オフ |
--json | JSON出力をstdoutに書き出し(スクリプトとAIエージェント向け) | オフ |
無料: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit追加: 14d 15d 28d 30d
デフォルト: 自動 — ファイルサイズから1 Mbpsを想定して推定し、2分のマージンを加算(最小5分)。--timeout 10m や --timeout 1h で上書き可能です。
#!/bin/bash tar czf /tmp/backup.tar.gz /data echo "$BACKUP_KEY" | ttl send --password-stdin -t 6h /tmp/backup.tar.gz rm /tmp/backup.tar.gz
$ ttl send -p mypass123 file.pdf | pbcopy
$ ttl send -p mypass123 file.pdf | xclip -sel clip
$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env # リンクは1回だけ有効、5分で期限切れ
# 送信 — JSONモードではパスワードが自動生成されます $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"} # 取得 $ ttl --json get -p aB3kL9mX xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # エラーはok:falseを返します {"ok":false,"error":"Link not found"}
--json モードでは、すべての出力がstdoutに構造化JSONとして出力されます。送信時にパスワードが指定されていない場合、自動生成されてレスポンスに含まれます。終了コードは成功時0、エラー時1です。
Orbitはより大きなファイル(10 GB)、より長い保持期間(30日)、ファイル管理(一覧と削除)を利用可能にします。
APIキーは自動検出されます: TTL_API_KEY環境変数、バイナリの隣のttl.key、または~/.ttl/key。ttl activateでキーを保存するか、これらの場所に手動で書き込んでください。
# キーを有効化 $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # プランと使用状況を確認 $ ttl plan Plan: orbit Max file size: 10.0 GB Max TTL: 30 days Uploads per day: Unlimited Usage: Uploads today: 3 Active storage: 1.2 GB / 250.0 GB # 延長TTLで送信 $ ttl send -t 30d large-backup.tar.gz # 最近のアップロードを一覧 $ ttl list xK9mQ2vLpA 4.2 MB 2026-03-16 10:30 → 2026-04-15 10:30 [active] https://ttl.space/xK9mQ2vLpA rT7bNw3KpF 912.0 KB 2026-03-15 14:20 → 2026-03-17 14:20 [active (burn)] https://ttl.space/rT7bNw3KpF # ファイルを早期削除 $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # 保存されたキーを削除 $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl getまたは--jsonモードを使用してください。以下のエンドポイントはOrbitファイル管理用です。$ curl https://ttl.space/v1/files -H "X-API-Key: ttl_orbit_..." {"files":[{"token":"xK9mQ2vLpA","link":"https://ttl.space/xK9mQ2vLpA","size_bytes":1048576,"created_at":1711800600,"expires_at":1714392600,"burn":false,"expired":false}]}
このキーでアップロードされた全ファイルを返します。Orbitプランが必要です。
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
成功時に204 No Contentを返します。Orbitプランが必要です。ファイルはこのキーに属している必要があります。
| ステータス | 意味 |
|---|---|
401 | 無効または期限切れのAPIキー |
403 | 機能にはOrbitプランが必要です |
404 | ファイルが見つからないか、このキーに属していません |
429 | リクエスト制限を超過 |
| 制限 | 無料 | Orbit |
|---|---|---|
| 最大ファイルサイズ | 2 GB | 10 GB |
| 最大TTL | 7日 | 30日 |
| 1日あたりのアップロード | 10 | 50 |
| ストレージ容量 | — | 250 GB |
| 一覧と削除 | — | ✓ |
| 最小パスワード長 | 8文字 | |
| IPあたりのリクエスト | 10秒あたり30 | |
| IPあたりの接続 | 同時10 | |
ファイルはアップロード前にお使いのデバイス上で暗号化されます。サーバーは暗号文のみを保存し、ファイルを復号することはできません。
| コンポーネント | アルゴリズム / 値 |
|---|---|
| 鍵導出 | Argon2id (time=3, memory=64 MB, parallelism=1) |
| 暗号方式 | XChaCha20-Poly1305 AEAD |
暗号文に対するいかなる変更も、復号の失敗を引き起こします。サーバーは暗号文を公開する前に、暗号化キーから導出された一方向トークンを使用して、ダウンロード者が正しいパスワードを知っていることを検証します。