# 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.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# 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 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
# 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.
$ ttl send -p mySecretPass -t 1h document.pdf
# plik jest trwale usuwany po pierwszym pobraniu $ ttl send -b photo.jpg
$ 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)
$ 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.
# 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)
$ ttl get -o ~/Downloads aBcDeFgHiJ
Domyślnie pliki są zapisywane w bieżącym katalogu. Użyj -o / --output, aby określić inny katalog.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
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.
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:
$ 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.
$ 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.
-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.--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).
--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.
ttl.passwordJeś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.
-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.| Flaga | Opis | Domyślnie |
|---|---|---|
-p, --password P | Hasło szyfrowania | interaktywnie |
--password-stdin | Odczytaj hasło ze stdin | |
--password-file F | Odczytaj hasło z pliku | |
-t, --ttl DUR | Czas życia | 7d |
-b, --burn | Zniszcz po odczytaniu (pojedyncze pobranie) | wył. |
--timeout DUR | Limit czasu transferu | auto |
--server URL | Adres URL serwera | https://ttl.space |
-h3, --http3 | Spróbuj HTTP/3 (QUIC), powrót do TCP | wył. |
--json | Wyjście JSON na stdout (dla skryptów i agentów AI) | wyłączone |
| Flaga | Opis | Domyślnie |
|---|---|---|
-p, --password P | Hasło deszyfrowania | interaktywnie |
--password-stdin | Odczytaj hasło ze stdin | |
--password-file F | Odczytaj hasło z pliku | |
-o, --output DIR | Katalog wyjściowy | bieżący katalog |
--timeout DUR | Limit czasu transferu | auto |
-h3, --http3 | Spróbuj HTTP/3 (QUIC), powrót do TCP | wył. |
--json | Wyjście JSON na stdout (dla skryptów i agentów AI) | wyłączone |
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
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.
#!/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 # link działa dokładnie raz, wygasa po 5 minutach
# 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.
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
ttl send / ttl get lub trybu --json. Poniższe endpointy służą do zarządzania plikami 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.
$ 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.
| Status | Znaczenie |
|---|---|
401 | Nieprawidłowy lub wygasły klucz API |
403 | Funkcja wymaga planu Orbit |
404 | Plik nie znaleziony lub nie należy do tego klucza |
429 | Przekroczono limit żądań |
| Ograniczenie | Bezpłatny | Orbit |
|---|---|---|
| Maks. rozmiar pliku | 2 GB | 10 GB |
| Maks. TTL | 7 dni | 30 dni |
| Przesyłania dziennie | 10 | 50 |
| Limit miejsca | — | 250 GB |
| Lista i usuwanie | — | ✓ |
| Min. długość hasła | 8 znaków | |
| Żądania na IP | 30 na 10 sekund | |
| Połączenia na IP | 10 jednoczesnych | |
Pliki są szyfrowane na Twoim urządzeniu przed wysłaniem. Serwer przechowuje wyłącznie szyfrogram i nie może odszyfrować Twoich plików.
| Komponent | Algorytm / wartość |
|---|---|
| Derywacja klucza | Argon2id (czas=3, pamięć=64 MB, równoległość=1) |
| Szyfr | XChaCha20-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.