# dosya gönder: parola otomatik oluşturulur, bağlantı + parola yazdırılır $ 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 # indir: parola etkileşimli olarak sorulur $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
CLI şifreleme, yükleme, indirme ve şifre çözme işlemlerini otomatik yapar. Sunucu parolanızı veya düz metin verinizi asla görmez.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# platformunuz için sürümlerden indirin $ 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
# parolayı otomatik oluştur, varsayılan 7 gün TTL $ ttl send report.xlsx
Terminalde parola belirtilmezse CLI şunu sorar:
No password provided. Generate one? [Y/n]:
Otomatik oluşturmak için Enter'a basın veya y yazın.
$ ttl send -p mySecretPass -t 1h document.pdf
# ilk indirme başladığı anda kullanılmış sayılır; kesilirse yalnızca o indirme devam edebilir $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # 5 dakikada süresi dolar $ ttl send -t 30m meeting-link.txt # 30 dakikada süresi dolar $ ttl send -t 6h backup.tar.gz # 6 saatte süresi dolar $ ttl send -t 1d daily-report.pdf # 1 günde süresi dolar $ ttl send -t 3d project-archive.zip # 3 günde süresi dolar $ ttl send -t 5d design-assets.zip # 5 günde süresi dolar $ ttl send report.xlsx # 7 günde süresi dolar (varsayılan)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Parola güvenli şekilde okunur, terminalde gösterilmez. Orijinal dosya adı korunur; hedef dizinde aynı adda bir dosya varsa üzerine yazılmaz, dosya ad (1).uzantı olarak kaydedilir.
# tam URL yerine yalnızca 10 karakterlik token kullanabilirsiniz $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
Varsayılan olarak dosyalar mevcut dizine kaydedilir. Farklı bir dizin belirtmek için -o / --output kullanın.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Bağlantıyı doğrudan ziyaret ederek dosyaları tarayıcınızda da indirebilir ve şifresini çözebilirsiniz. Web arayüzü aynı dosya biçimini ve algoritmaları (Argon2id, XChaCha20-Poly1305) kullanır ve parolanızı sorar. Yazılım kurulumu gerekmez.
Parola, şifreleme anahtarının temelidir. Cihazınızdan asla çıkmaz ve sunucuya asla gönderilmez. Altı farklı yolla belirtilebilir:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
[0-9A-Za-z] karakter setinden kriptografik olarak rastgele 12 karakterlik parola oluşturur. Yalnızca send sırasında kullanılabilir (etkileşimli olarak ya da --json modunda otomatik).
$ 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 ekrana yansıtılmaz ve kabuk geçmişine kaydedilmez. send sırasında önce otomatik oluşturma teklif edilir; kendi parolanızı yazarsanız doğrulama için ikinci kez girmeniz istenir. get sırasında doğrudan sorulur.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password ps aux çıktısında görünür ve kabuk geçmişine (~/.bash_history) kaydedilebilir. Paylaşımlı ortamlarda ve betiklerde kullanmaktan kaçının. Bunun yerine --password-stdin veya --password-file kullanın.--password-stdin# echo ile pipe $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # parola yöneticisinden pipe $ pass show ttl/key | ttl send --password-stdin data.zip # ortam değişkeninden pipe $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Stdin'den ilk satırı okur. Betiklerde, CI/CD işlem hatlarında ve otomasyonda kullanışlıdır. Stdin bir terminal değilse ve parola kaynağı belirtilmemişse CLI hata ile çıkar (--json kullanılıyorsa hariç, bu durumda parola otomatik oluşturulur).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Dosyanın ilk satırını okur (sondaki satır sonu karakteri kırpılır). Docker secrets (/run/secrets/), Vault agent dosyaları ve benzeri yapılarla uyumludur.
ttl.passwordAçıkça parola verilmezse CLI, önce çalıştırılabilir dosyanın yanındaki ttl.password dosyasını, ardından ~/.ttl/password dosyasını arar. İlk satır parola olarak kullanılır.
-p / --password, --password-stdin ve --password-file birleştirilemez. Otomatik algılanan ttl.password dosyası yalnızca bunların hiçbiri verilmediğinde kontrol edilir. Minimum parola uzunluğu 8 karakterdir.| Bayrak | Açıklama | Varsayılan |
|---|---|---|
-p, --password P | Şifreleme parolası | etkileşimli |
--password-stdin | Parolayı stdin'den oku | |
--password-file F | Parolayı dosyadan oku | |
-t, --ttl SÜRE | Yaşam süresi | 7d |
-b, --burn | Okuduktan sonra sil (tek indirme) | kapalı |
-u, --uploader-only | Yalnızca kendi API anahtarınız indirebilir (Orbit; eş anlamlısı --private) | kapalı |
--timeout SÜRE | Transfer zaman aşımı | yok |
--server URL | Sunucu URL'si | https://ttl.space |
-h3, --http3 | HTTP/3 (QUIC) dene, TCP'ye geri dön | kapalı |
--json | JSON çıktısını stdout'a yaz (betikler ve yapay zeka ajanları için) | kapalı |
| Bayrak | Açıklama | Varsayılan |
|---|---|---|
-p, --password P | Şifre çözme parolası | etkileşimli |
--password-stdin | Parolayı stdin'den oku | |
--password-file F | Parolayı dosyadan oku | |
-o, --output DIR | Çıktı dizini | mevcut dizin |
--timeout SÜRE | Transfer zaman aşımı | yok |
-h3, --http3 | HTTP/3 (QUIC) dene, TCP'ye geri dön | kapalı |
--json | JSON çıktısını stdout'a yaz (betikler ve yapay zeka ajanları için) | kapalı |
Ücretsiz: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit ile ayrıca: 14d 15d 28d 30d permanent
Varsayılan: yok. Duran bir aktarım kendiliğinden devam eder; ilerleyemezse vazgeçer. Sınır koymak için --timeout 30m veya --timeout 2h kullanın.
#!/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 # bağlantı tam olarak bir kez çalışır, 5 dakikada süresi dolar
# gönder: JSON modunda parola otomatik oluşturulur $ 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"} # indir $ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # hatalar ok:false döndürür {"ok":false,"error":"Link not found"}
--json modunda tüm çıktı stdout'a yapılandırılmış JSON olarak verilir. Gönderim sırasında parola belirtilmezse otomatik oluşturulur ve yanıta dahil edilir. Çıkış kodu başarıda 0, hatada 1'dir.
Orbit daha büyük dosyalar (10 GB), daha uzun saklama (30 gün veya kalıcı), yalnızca yükleyene açık dosyalar (yalnızca sizin API anahtarınızla indirilebilir) ve dosya yönetimi (listeleme ve silme) sunar. Tam karşılaştırma: Features.
API anahtarı otomatik algılanır: TTL_API_KEY ortam değişkeni, çalıştırılabilir dosyanın yanındaki ttl.key veya ~/.ttl/key. Anahtarı kaydetmek için ttl activate kullanın veya bu konumlardan birine elle yazın.
# anahtarınızı etkinleştirin: gizli istemle sorulur, kabuk geçmişine girmez $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # etkileşimsiz: ttl activate --key-stdin | ttl activate --key-file F # plan ve kullanımı kontrol edin $ 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 # uzatılmış TTL ile gönder $ ttl send -t 30d large-backup.tar.gz # kalıcı dosya (yalnızca Orbit): süre sonu yok, siz silene ya da aboneliğiniz bitene kadar saklanır $ ttl send -t permanent archive.tar.gz # özel dosya gönder: yalnızca sizin API anahtarınız indirebilir (yalnızca Orbit) $ ttl send -u payroll.xlsx # son yüklemeleri listele $ 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 # dosyayı erken sil $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # kayıtlı anahtarı kaldır $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get veya --json modunu kullanın. Aşağıdaki uç noktalar Orbit dosya yönetimi içindir.$ 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} # sonraki sayfa: yalnızca has_more true ise; önceki yanıttaki next_cursor değerini gönderin $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
Bu anahtarla yüklenen dosyaları en yeniden eskiye, sayfa başına 20 dosya olarak döndürür. has_more değeri true olduğunda yanıtta next_cursor da bulunur; sonraki sayfayı almak için bunu ?cursor= olarak gönderin. Orbit planı gerektirir.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Başarıda 204 No Content döndürür. Orbit planı gerektirir. Dosya bu anahtara ait olmalıdır.
| Durum | Anlam |
|---|---|
401 | Geçersiz veya süresi dolmuş API anahtarı |
403 | Özellik Orbit planı gerektirir |
404 | Dosya bulunamadı veya bu anahtara ait değil |
429 | İstek limiti aşıldı |
500 | Sunucu iç hatası, daha sonra tekrar deneyin |
502 | Depolama geçici olarak kullanılamıyor, daha sonra tekrar deneyin |
| Kısıtlama | Ücretsiz | Orbit |
|---|---|---|
| Maks dosya boyutu | 2 GB | 10 GB |
| Maks TTL | 7 gün | 30 gün veya kalıcı |
| Günlük yükleme | 10 | Sınırsız |
| Günlük yükleme hacmi (IP başına) | 10 GB | Sınırsız |
| Eşzamanlı yükleme | IP başına 1 | IP başına 1 ve API anahtarı başına 1 |
| Depolama kotası | ✗ | 500 GB |
| Dosya listeleme | ✗ | ✓ |
| Erken silme | ✓ | ✓ |
| Sadece yükleyene özel dosyalar | ✗ | ✓ |
| Min parola uzunluğu | 8 karakter | |
| IP başına istek | 10 saniyede 30 | |
| IP başına bağlantı | 10 eşzamanlı | |
Dosyalar yüklemeden önce cihazınızda şifrelenir. Sunucu yalnızca şifreli metni saklar ve dosyalarınızın şifresini çözemez.
| Bileşen | Algoritma / Değer |
|---|---|
| Anahtar türetme | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| Şifre | XChaCha20-Poly1305 AEAD |
Şifreli metinde yapılan herhangi bir değişiklik, şifre çözme işleminin başarısız olmasına neden olur. Sunucu, şifreli metni göndermeden önce indiren kişinin doğru parolayı bildiğini, şifreleme anahtarından türetilen tek yönlü bir token ile doğrular.