# Trimite fișier: parola este generată automat, link + parolă afișate $ ttl send secret.pdf No password provided. Generate one? [Y/n]: Generated password: aB3kL9mXq7Rt ·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB) IMPORTANT! Save your password — required to download and decrypt the file. Password: aB3kL9mXq7Rt https://ttl.space/aBcDeFgHiJ # Descarcă: parola este cerută interactiv $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
CLI-ul criptează, încarcă, descarcă și decriptează automat. Serverul nu îți vede niciodată parola sau datele necriptate.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# Descarcă pentru platforma ta din pagina de versiuni $ curl -Lo ttl.tar.gz \ https://github.com/tweenietomatoes/ttl/releases/download/v1.6.0/ttl_1.6.0_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 1.6.0
# Generare automată a parolei, TTL implicit 7 zile $ ttl send report.xlsx
Dacă în terminal nu este furnizată o parolă, CLI-ul întreabă:
No password provided. Generate one? [Y/n]:
Apasă Enter sau scrie y pentru generare automată.
$ ttl send -p mySecretPass -t 1h document.pdf
# Fișierul este consumat în momentul în care începe prima descărcare; după o întrerupere, doar acea descărcare poate continua $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # expiră în 5 minute $ ttl send -t 30m meeting-link.txt # expiră în 30 de minute $ ttl send -t 6h backup.tar.gz # expiră în 6 ore $ ttl send -t 1d daily-report.pdf # expiră într-o zi $ ttl send -t 3d project-archive.zip # expiră în 3 zile $ ttl send -t 5d design-assets.zip # expiră în 5 zile $ ttl send report.xlsx # expiră în 7 zile (implicit)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Parola este citită în siguranță, nu este afișată în terminal. Numele original al fișierului este restaurat; dacă acest nume există deja în directorul de ieșire, fișierul este salvat ca name (1).ext în loc să îl suprascrie pe cel existent.
# Poți folosi doar tokenul de 10 caractere în loc de URL-ul complet $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
În mod implicit, fișierele sunt salvate în directorul curent. Folosește -o / --output pentru a specifica un alt director.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Poți descărca și decripta fișiere și în browser, vizitând linkul direct. Interfața web folosește același format de fișier și aceiași algoritmi (Argon2id, XChaCha20-Poly1305) și îți cere parola. Nu este necesară instalarea de software.
Parola este folosită pentru a deriva cheia de criptare. Nu îți părăsește niciodată dispozitivul și nu este trimisă niciodată către server. Există șase moduri de a o furniza:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
Generează o parolă aleatoare din punct de vedere criptografic, de 12 caractere, din [0-9A-Za-z]. Disponibilă doar la send (interactiv sau automat în modul --json).
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
Parola nu este afișată și nu se salvează în istoricul shell-ului. La send alegi mai întâi dacă să fie generată automat. La get ți se cere direct să o introduci.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password este vizibil în ieșirea ps aux și poate fi salvat în istoricul shell-ului (~/.bash_history). Evită-l în medii partajate și în scripturi. În schimb, folosește --password-stdin sau --password-file în schimb.--password-stdin# Trimite prin echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # Trimite dintr-un manager de parole $ pass show ttl/key | ttl send --password-stdin data.zip # Trimite dintr-o variabilă de mediu $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # Heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Citește prima linie din stdin. Util în scripturi, pipeline-uri CI/CD și automatizare. Dacă stdin nu este un terminal și nu este furnizată o sursă de parolă, CLI-ul iese cu o eroare (cu excepția --json, care generează automat o parolă).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Citește prima linie a fișierului (caracterul de linie nouă final este eliminat). Compatibil cu Docker Secrets (/run/secrets/), fișierele Vault agent și modele similare.
ttl.passwordDacă nu este furnizată o parolă explicită, CLI-ul caută un fișier ttl.password lângă executabil, apoi ~/.ttl/password. Prima linie este folosită ca parolă.
-p / --password, --password-stdin și --password-file nu pot fi combinate. Fișierul ttl.password detectat automat este verificat doar dacă niciuna dintre acestea nu este specificată. Lungime minimă: 8 caractere.| Opțiune | Descriere | Implicit |
|---|---|---|
-p, --password P | Parolă de criptare | interactiv |
--password-stdin | Citește parola de la stdin | |
--password-file F | Citește parola dintr-un fișier | |
-t, --ttl DUR | Durată de valabilitate | 7d |
-b, --burn | Distrugere după citire (descărcare unică) | oprit |
-u, --uploader-only | Doar propria ta cheie API poate descărca (Orbit; alias --private) | oprit |
--timeout DUR | Timeout pentru transfer | fără limită |
--server URL | URL-ul serverului | https://ttl.space |
-h3, --http3 | Încearcă HTTP/3 (QUIC), cu revenire la TCP | oprit |
--json | Ieșire JSON la stdout (pentru scripturi și agenți AI) | oprit |
| Opțiune | Descriere | Implicit |
|---|---|---|
-p, --password P | Parolă de decriptare | interactiv |
--password-stdin | Citește parola de la stdin | |
--password-file F | Citește parola dintr-un fișier | |
-o, --output DIR | Director de ieșire | directorul curent |
--timeout DUR | Timeout pentru transfer | fără limită |
-h3, --http3 | Încearcă HTTP/3 (QUIC), cu revenire la TCP | oprit |
--json | Ieșire JSON la stdout (pentru scripturi și agenți AI) | oprit |
Gratuit: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit adaugă: 14d 15d 28d 30d permanent
Implicit: fără limită. Un transfer care se blochează se reia singur și se oprește dacă nu mai poate continua. Setează o limită cu --timeout 30m sau --timeout 2h.
#!/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 # Linkul funcționează exact o singură dată, expiră după 5 minute
# trimitere: parola este generată automat în modul JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"uploader_only":false,"is_permanent":false,"password":"aB3kL9mXq7Rt"} # descărcare $ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # erorile returnează ok:false {"ok":false,"error":"Link not found"}
În modul --json toată ieșirea este JSON structurat la stdout. Dacă la trimitere nu este furnizată o parolă, una este generată automat și inclusă în răspuns. Codul de ieșire este 0 la succes, 1 la eroare.
Orbit oferă acces la fișiere mai mari (10 GB), păstrare mai îndelungată (30 de zile sau permanent), fișiere private (doar cheia ta API le poate descărca) și gestionare a fișierelor (listare și ștergere). Comparație completă: Features.
Cheia API este detectată automat: variabila de mediu TTL_API_KEY, ttl.key lângă executabil sau ~/.ttl/key. Folosește ttl activate pentru a salva cheia sau scrie-o manual într-una dintre aceste locații.
# activează cheia ta: este cerută fără a fi afișată, deci nu ajunge în istoricul shell-ului $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # non-interactiv: ttl activate --key-stdin | ttl activate --key-file F # verifică planul și utilizarea $ ttl plan Plan: orbit Max file size: 10.0 GB Max TTL: 30 days (or permanent) Uploads per day: 1000000 Usage: Uploads today: 3 Active storage: 1.2 GB / 500.0 GB # trimite cu TTL extins $ ttl send -t 30d large-backup.tar.gz # fișier permanent (doar Orbit): fără expirare, păstrat până când îl ștergi sau până se încheie abonamentul $ ttl send -t permanent archive.tar.gz # trimite un fișier privat: doar cheia ta API îl poate descărca (doar Orbit) $ ttl send -u payroll.xlsx # listează încărcările recente $ 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 # șterge un fișier $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # elimină cheia salvată $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get sau modul --json. Endpoint-urile de mai jos sunt pentru gestionarea fișierelor 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,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false} # pagina următoare: doar când has_more este true; transmite next_cursor din răspunsul anterior $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
Returnează fișierele încărcate cu această cheie, cele mai noi primele, câte 20 pe pagină. Când has_more este true, răspunsul include și next_cursor; transmite-l ca ?cursor= pentru a obține pagina următoare. Necesită planul Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Returnează 204 No Content la succes. Necesită planul Orbit. Fișierul trebuie să aparțină acestei chei.
| Status | Semnificație |
|---|---|
401 | Cheie API nevalidă sau expirată |
403 | Funcționalitatea necesită planul Orbit |
404 | Fișierul nu a fost găsit sau nu aparține acestei chei |
429 | Limita de cereri a fost depășită |
500 | Eroare internă a serverului, încearcă din nou mai târziu |
502 | Stocare temporar indisponibilă, încearcă din nou mai târziu |
| Limită | Gratuit | Orbit |
|---|---|---|
| Dimensiune maximă a fișierului | 2 GB | 10 GB |
| TTL maxim | 7 zile | 30 de zile sau permanent |
| Încărcări pe zi | 10 | Nelimitat |
| Volum de încărcare pe zi (pe IP) | 10 GB | Nelimitat |
| Încărcări simultane | 1 pe IP | 1 pe IP și pe cheie API |
| Cotă de stocare | ✗ | 500 GB |
| Listarea fișierelor | ✗ | ✓ |
| Ștergere anticipată | ✓ | ✓ |
| Fișiere private | ✗ | ✓ |
| Lungime minimă a parolei | 8 caractere | |
| Cereri pe IP | 30 la 10 secunde | |
| Conexiuni pe IP | 10 simultane | |
Fișierele sunt criptate pe dispozitivul tău înainte de a fi încărcate. Serverul stochează doar text cifrat și nu poate decripta fișierele tale.
| Componentă | Algoritm / Valoare |
|---|---|
| Derivare cheie | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| Cifru | XChaCha20-Poly1305 AEAD |
Orice modificare a textului cifrat duce la eșecul decriptării. Serverul verifică faptul că cel care descarcă cunoaște parola corectă înainte de a livra textul cifrat, prin intermediul unui token unidirecțional derivat din cheia de criptare.