Instrukcja obsługi

← Home

Szybki start

# wyślij plik — hasło generowane automatycznie, wyświetla link + hasło
$ 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

# pobierz — prosi o hasło interaktywnie
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLI zajmuje się szyfrowaniem, wysyłaniem, pobieraniem i deszyfrowaniem. Serwer nigdy nie widzi Twojego hasła ani danych w postaci jawnej.

Instalacja

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl
$ scoop install ttl

Gotowy plik binarny

# pobierz wersję dla swojej platformy z sekcji wydania
$ 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

$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest

Ze źródła

$ git clone https://github.com/tweenietomatoes/ttl
$ cd ttl && go build -o ttl ./cmd/ttl/
$ sudo mv ttl /usr/local/bin/

Weryfikacja

$ ttl version
ttl v1.3.0

Wysyłanie plików

Podstawowe wysyłanie

# automatyczne generowanie hasła, domyślny TTL 7d
$ ttl send report.xlsx

Gdy hasło nie zostanie podane w terminalu, CLI zapyta:

No password provided. Generate one? [Y/n]:

Naciśnij Enter lub wpisz y, aby wygenerować automatycznie.

Własne hasło

$ ttl send -p mySecretPass -t 1h document.pdf

Zniszcz po odczytaniu

# plik jest trwale usuwany po pierwszym pobraniu
$ ttl send -b photo.jpg

Własny TTL

$ ttl send -t 5m temp-credentials.txt   # wygasa za 5 minut
$ ttl send -t 30m meeting-link.txt      # wygasa za 30 minut
$ ttl send -t 6h backup.tar.gz          # wygasa za 6 godzin
$ ttl send -t 1d daily-report.pdf       # wygasa za 1 dzień
$ ttl send -t 3d project-archive.zip    # wygasa za 3 dni
$ ttl send -t 5d design-assets.zip      # wygasa za 5 dni
$ ttl send report.xlsx                  # wygasa za 7 dni (domyślnie)

Pobieranie plików

Interaktywne (terminal)

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Hasło nie jest wyświetlane w terminalu. Oryginalna nazwa pliku jest zachowana.

Tylko token

# możesz użyć samego 10-znakowego tokena zamiast pełnego URL
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Katalog wyjściowy

$ ttl get -o ~/Downloads aBcDeFgHiJ

Domyślnie pliki są zapisywane w bieżącym katalogu. Użyj -o / --output, aby określić inny katalog.

Z flagą hasła

$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ

Przeglądarka

Możesz również pobierać i odszyfrowywać pliki w przeglądarce, odwiedzając link bezpośrednio. Interfejs webowy używa tej samej biblioteki szyfrowania i prosi o hasło. Nie wymaga instalacji oprogramowania.

Obsługa haseł

Hasło jest ziarnem klucza szyfrowania. Nigdy nie opuszcza Twojego urządzenia i nigdy nie jest wysyłane na serwer. Istnieje pięć sposobów jego podania:

1. Automatyczne generowanie (tylko wysyłanie)

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: y
Generated password: aB3kL9mX

Generuje kryptograficznie losowe hasło o długości 8 znaków z zestawu [0-9A-Za-z]. Dostępne tylko podczas send w terminalu.

2. Interaktywny monit

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: n
Enter password: ********
Confirm password: ********

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********

Hasło nie jest wyświetlane. Podczas send najpierw wybierasz, czy wygenerować automatycznie. Podczas get hasło jest pytane bezpośrednio.

3. Flaga: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password jest widoczne w wyjściu ps aux i może zostać zapisane w historii powłoki (~/.bash_history). Unikaj używania we współdzielonych środowiskach i skryptach. Zamiast tego użyj --password-stdin lub --password-file.

4. Stdin: --password-stdin

# potok z echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# potok z menedżera haseł
$ pass show ttl/key | ttl send --password-stdin data.zip

# potok ze zmiennej środowiskowej
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

# heredoc
$ ttl send --password-stdin report.pdf <<<"mySecretPass"

Odczytuje pierwszą linię ze stdin. Przydatne w skryptach, potokach CI/CD i automatyzacji. Gdy stdin nie jest terminalem i nie podano źródła hasła, CLI kończy się błędem (chyba że użyto --json, który automatycznie generuje hasło).

5. Plik: --password-file

$ ttl send --password-file /run/secrets/key report.xlsx
$ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ

Odczytuje pierwszą linię pliku (końcowy znak nowej linii jest usuwany). Kompatybilne z sekretami Dockera (/run/secrets/), plikami agenta Vault i podobnymi wzorcami.

6. Automatycznie wykryty plik: ttl.password

Jeśli nie podano jawnego hasła, CLI szuka pliku ttl.password obok programu, a następnie ~/.ttl/password. Pierwsza linia jest używana jako hasło.

Jednocześnie można użyć tylko jednego jawnego źródła hasła. -p / --password, --password-stdin i --password-file nie mogą być łączone. Automatycznie wykryty plik ttl.password jest sprawdzany tylko wtedy, gdy żadne z nich nie zostało podane. Minimalna długość: 8 znaków.

Opis opcji

Flagi wysyłania

FlagaOpisDomyślnie
-p, --password PHasło szyfrowaniainteraktywnie
--password-stdinOdczytaj hasło ze stdin
--password-file FOdczytaj hasło z pliku
-t, --ttl DURCzas życia7d
-b, --burnZniszcz po odczytaniu (pojedyncze pobranie)wył.
--timeout DURLimit czasu transferuauto
--server URLAdres URL serwerahttps://ttl.space
-h3, --http3Spróbuj HTTP/3 (QUIC), powrót do TCPwył.
--jsonWyjście JSON na stdout (dla skryptów i agentów AI)wyłączone

Flagi pobierania

FlagaOpisDomyślnie
-p, --password PHasło deszyfrowaniainteraktywnie
--password-stdinOdczytaj hasło ze stdin
--password-file FOdczytaj hasło z pliku
-o, --output DIRKatalog wyjściowybieżący katalog
--timeout DURLimit czasu transferuauto
-h3, --http3Spróbuj HTTP/3 (QUIC), powrót do TCPwył.
--jsonWyjście JSON na stdout (dla skryptów i agentów AI)wyłączone

Wartości TTL

Bezpłatny: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d

Orbit dodaje: 14d 15d 28d 30d

Limit czasu

Domyślnie: auto — szacowany na podstawie rozmiaru pliku przy założeniu 1 Mbps + 2 minuty zapasu (minimum 5 minut). Nadpisz za pomocą --timeout 10m lub --timeout 1h.

Przykłady

Skrypt: kopia zapasowa i wysyłanie

#!/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

Kopiowanie linku do schowka (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Kopiowanie linku do schowka (Linux)

$ ttl send -p mypass123 file.pdf | xclip -sel clip

Zniszcz: jednorazowy sekret

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# link działa dokładnie raz, wygasa po 5 minutach

Tryb JSON (skrypty & agenci AI)

# wysyłanie — hasło generowane automatycznie w trybie JSON
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"}

# pobieranie
$ ttl --json get -p aB3kL9mX xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# błędy zwracają ok:false
{"ok":false,"error":"Link not found"}

W trybie --json całe wyjście to strukturalny JSON na stdout. Jeśli podczas wysyłania nie podano hasła, jest ono generowane automatycznie i dołączane do odpowiedzi. Kod wyjścia to 0 przy sukcesie i 1 przy błędzie.

Plan Orbit

Orbit odblokowuje większe pliki (10 GB), dłuższe przechowywanie (30 dni) i zarządzanie plikami (lista i usuwanie).

Klucz API jest wykrywany automatycznie: zmienna środowiskowa TTL_API_KEY, ttl.key obok programu lub ~/.ttl/key. Użyj ttl activate, aby zapisać klucz, lub wpisz go ręcznie w jednej z tych lokalizacji.

# aktywuj swój klucz
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

# sprawdź plan i użycie
$ 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

# wyślij z wydłużonym TTL
$ ttl send -t 30d large-backup.tar.gz

# wyświetl ostatnie przesyłania
$ 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

# usuń plik
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# usuń zapisany klucz
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

Wysyłanie i pobieranie wymagają pipeline'u szyfrowania CLI (Argon2id + XChaCha20-Poly1305 + blokowe AEAD). Do skryptów użyj ttl send / ttl get lub trybu --json. Poniższe endpointy służą do zarządzania plikami Orbit.

Lista plików (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}]}

Zwraca wszystkie pliki przesłane za pomocą tego klucza. Wymaga planu Orbit.

Usuń plik (Orbit)

$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."

Zwraca 204 No Content po pomyślnym usunięciu. Wymaga planu Orbit. Plik musi należeć do tego klucza.

Odpowiedzi błędów

StatusZnaczenie
401Nieprawidłowy lub wygasły klucz API
403Funkcja wymaga planu Orbit
404Plik nie znaleziony lub nie należy do tego klucza
429Przekroczono limit żądań

Limity

OgraniczenieBezpłatnyOrbit
Maks. rozmiar pliku2 GB10 GB
Maks. TTL7 dni30 dni
Przesyłania dziennie1050
Limit miejsca250 GB
Lista i usuwanie
Min. długość hasła8 znaków
Żądania na IP30 na 10 sekund
Połączenia na IP10 jednoczesnych

Szyfrowanie

Pliki są szyfrowane na Twoim urządzeniu przed wysłaniem. Serwer przechowuje wyłącznie szyfrogram i nie może odszyfrować Twoich plików.

KomponentAlgorytm / wartość
Derywacja kluczaArgon2id (czas=3, pamięć=64 MB, równoległość=1)
SzyfrXChaCha20-Poly1305 AEAD

Jakakolwiek modyfikacja szyfrogramu powoduje błąd deszyfrowania. Serwer weryfikuje, że pobierający zna prawidłowe hasło przed udostępnieniem szyfrogramu, używając jednokierunkowego tokenu wyprowadzonego z klucza szyfrowania.