# Datei senden: Passwort wird automatisch generiert, Link + Passwort werden ausgegeben $ 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 # Herunterladen: Passwort wird interaktiv abgefragt $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
Das CLI verschlüsselt, lädt hoch, lädt herunter und entschlüsselt automatisch. Der Server sieht weder Ihr Passwort noch Ihre Klartextdaten.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# Für Ihre Plattform von den Releases herunterladen $ 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
# Passwort automatisch generieren, Standard-TTL 7d $ ttl send report.xlsx
Wenn im Terminal kein Passwort angegeben wird, fragt das CLI:
No password provided. Generate one? [Y/n]:
Drücken Sie Enter oder geben Sie y ein, um automatisch zu generieren.
$ ttl send -p mySecretPass -t 1h document.pdf
# ist verbraucht, sobald der erste Download beginnt; nach einem Abbruch kann nur dieser Download weiterlaufen $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # läuft in 5 Minuten ab $ ttl send -t 30m meeting-link.txt # läuft in 30 Minuten ab $ ttl send -t 6h backup.tar.gz # läuft in 6 Stunden ab $ ttl send -t 1d daily-report.pdf # läuft in 1 Tag ab $ ttl send -t 3d project-archive.zip # läuft in 3 Tagen ab $ ttl send -t 5d design-assets.zip # läuft in 5 Tagen ab $ ttl send report.xlsx # läuft in 7 Tagen ab (Standard)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Das Passwort wird sicher eingelesen, es wird nicht im Terminal angezeigt. Der ursprüngliche Dateiname wird wiederhergestellt; existiert im Ausgabeverzeichnis bereits eine Datei mit diesem Namen, wird die Datei als name (1).ext gespeichert, statt sie zu überschreiben.
# Sie können nur den 10-stelligen Token anstelle der vollständigen URL verwenden $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
Standardmäßig werden Dateien im aktuellen Verzeichnis gespeichert. Verwenden Sie -o / --output, um ein anderes Verzeichnis anzugeben.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Sie können Dateien auch direkt im Browser herunterladen und entschlüsseln, indem Sie den Link besuchen. Die Weboberfläche verwendet dasselbe Dateiformat und dieselben Algorithmen (Argon2id, XChaCha20-Poly1305) und fragt nach Ihrem Passwort. Keine Softwareinstallation erforderlich.
Das Passwort dient als Ausgangswert für den Verschlüsselungsschlüssel. Es verlässt niemals Ihr Gerät und wird niemals an den Server gesendet. Es gibt sechs Möglichkeiten, es anzugeben:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
Generiert ein kryptografisch zufälliges 12-Zeichen-Passwort aus [0-9A-Za-z]. Nur beim send verfügbar (interaktiv oder automatisch im --json-Modus).
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
Das Passwort wird nicht angezeigt und nicht in der Shell-Historie gespeichert. Beim send wählen Sie zuerst, ob automatisch generiert werden soll. Beim get werden Sie direkt zur Eingabe aufgefordert.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password ist in der ps aux-Ausgabe sichtbar und kann in der Shell-Historie (~/.bash_history) gespeichert werden. Vermeiden Sie dies in gemeinsam genutzten Umgebungen und Skripten. Verwenden Sie stattdessen --password-stdin oder --password-file.--password-stdin# Per echo weiterleiten $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # Aus dem Passwort-Manager weiterleiten $ pass show ttl/key | ttl send --password-stdin data.zip # Aus einer Umgebungsvariable weiterleiten $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # Heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Liest die erste Zeile von stdin. Nützlich in Skripten, CI/CD-Pipelines und Automatisierung. Wenn stdin kein Terminal ist und keine Passwortquelle angegeben wurde, beendet sich das CLI mit einem Fehler (außer bei --json, das automatisch ein Passwort generiert).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Liest die erste Zeile der Datei (abschließendes Zeilenumbruchzeichen wird entfernt). Kompatibel mit Docker Secrets (/run/secrets/), Vault-Agent-Dateien und ähnlichen Mustern.
ttl.passwordWenn kein explizites Passwort angegeben wird, sucht die CLI nach einer ttl.password-Datei neben der Programmdatei und dann nach ~/.ttl/password. Die erste Zeile wird als Passwort verwendet.
-p / --password, --password-stdin und --password-file können nicht kombiniert werden. Die automatisch erkannte ttl.password-Datei wird nur geprüft, wenn keine davon angegeben ist. Mindestlänge: 8 Zeichen.| Flag | Beschreibung | Standard |
|---|---|---|
-p, --password P | Verschlüsselungspasswort | interaktiv |
--password-stdin | Passwort von stdin lesen | |
--password-file F | Passwort aus Datei lesen | |
-t, --ttl DUR | Gültigkeitsdauer | 7d |
-b, --burn | Nach dem Lesen löschen (einmaliger Download) | aus |
-u, --uploader-only | Nur Ihr eigener API-Schlüssel kann herunterladen (Orbit; Alias --private) | aus |
--timeout DUR | Übertragungstimeout | unbegrenzt |
--server URL | Server-URL | https://ttl.space |
-h3, --http3 | HTTP/3 (QUIC) versuchen, Fallback auf TCP | aus |
--json | JSON-Ausgabe auf stdout (für Skripte und KI-Agenten) | aus |
| Flag | Beschreibung | Standard |
|---|---|---|
-p, --password P | Entschlüsselungspasswort | interaktiv |
--password-stdin | Passwort von stdin lesen | |
--password-file F | Passwort aus Datei lesen | |
-o, --output DIR | Ausgabeverzeichnis | aktuelles Verzeichnis |
--timeout DUR | Übertragungstimeout | unbegrenzt |
-h3, --http3 | HTTP/3 (QUIC) versuchen, Fallback auf TCP | aus |
--json | JSON-Ausgabe auf stdout (für Skripte und KI-Agenten) | aus |
Kostenlos: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit zusätzlich: 14d 15d 28d 30d permanent
Standard: unbegrenzt. Eine ins Stocken geratene Übertragung wird von selbst fortgesetzt und bricht ab, wenn sie nicht mehr weiterkommt. Ein Limit festlegen mit --timeout 30m oder --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 # Link funktioniert genau einmal, läuft nach 5 Minuten ab
# Senden: Passwort wird im JSON-Modus automatisch generiert $ 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"} # Herunterladen $ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # Fehler geben ok:false zurück {"ok":false,"error":"Link not found"}
Im --json-Modus erfolgt die gesamte Ausgabe als strukturiertes JSON auf stdout. Wenn beim Senden kein Passwort angegeben wird, wird eines automatisch generiert und in der Antwort enthalten. Der Exit-Code ist 0 bei Erfolg und 1 bei Fehler.
Orbit ermöglicht größere Dateien (10 GB), längere Aufbewahrung (30 Tage oder dauerhaft), Dateien nur für den Uploader (nur Ihr API-Schlüssel kann sie herunterladen) und Dateiverwaltung (Auflisten und Löschen). Vollständiger Vergleich: Features.
Der API-Schlüssel wird automatisch erkannt: TTL_API_KEY-Umgebungsvariable, ttl.key neben der Programmdatei oder ~/.ttl/key. Verwenden Sie ttl activate zum Speichern oder schreiben Sie ihn manuell an einen dieser Orte.
# Schlüssel aktivieren: Eingabe ohne Anzeige, damit er nicht in der Shell-Historie landet $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # nicht interaktiv: ttl activate --key-stdin | ttl activate --key-file F # Plan und Nutzung prüfen $ 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 # mit verlängerter TTL senden $ ttl send -t 30d large-backup.tar.gz # dauerhafte Datei (nur Orbit): kein Ablauf, bleibt erhalten, bis Sie sie löschen oder Ihr Abonnement endet $ ttl send -t permanent archive.tar.gz # private Datei senden: nur Ihr API-Schlüssel kann sie herunterladen (nur Orbit) $ ttl send -u payroll.xlsx # letzte Uploads auflisten $ 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 # Datei vorzeitig löschen $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # gespeicherten Schlüssel entfernen $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get oder den --json-Modus. Die folgenden Endpunkte dienen der Orbit-Dateiverwaltung.$ 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} # nächste Seite: nur wenn has_more true ist; next_cursor aus der vorherigen Antwort übergeben $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
Gibt die mit diesem Schlüssel hochgeladenen Dateien zurück, neueste zuerst, 20 pro Seite. Wenn has_more true ist, enthält die Antwort zusätzlich next_cursor; übergeben Sie diesen Wert als ?cursor=, um die nächste Seite abzurufen. Erfordert Orbit-Plan.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Gibt bei Erfolg 204 No Content zurück. Erfordert Orbit-Plan. Die Datei muss diesem Schlüssel gehören.
| Status | Bedeutung |
|---|---|
401 | Ungültiger oder abgelaufener API-Schlüssel |
403 | Funktion erfordert Orbit-Plan |
404 | Datei nicht gefunden oder gehört nicht zu diesem Schlüssel |
429 | Anfragelimit überschritten |
500 | Interner Serverfehler, später erneut versuchen |
502 | Speicher vorübergehend nicht verfügbar, später erneut versuchen |
| Beschränkung | Kostenlos | Orbit |
|---|---|---|
| Max. Dateigröße | 2 GB | 10 GB |
| Max. TTL | 7 Tage | 30 Tage oder dauerhaft |
| Uploads pro Tag | 10 | Unbegrenzt |
| Upload-Volumen pro Tag (pro IP) | 10 GB | Unbegrenzt |
| Gleichzeitige Uploads | 1 pro IP | 1 pro IP und pro API-Schlüssel |
| Speicherkontingent | ✗ | 500 GB |
| Dateiliste | ✗ | ✓ |
| Vorzeitiges Löschen | ✓ | ✓ |
| Dateien nur für den Uploader | ✗ | ✓ |
| Min. Passwortlänge | 8 Zeichen | |
| Anfragen pro IP | 30 pro 10 Sekunden | |
| Verbindungen pro IP | 10 gleichzeitig | |
Dateien werden auf Ihrem Gerät verschlüsselt, bevor sie hochgeladen werden. Der Server speichert nur Chiffretext und kann Ihre Dateien nicht entschlüsseln.
| Komponente | Algorithmus / Wert |
|---|---|
| Schlüsselableitung | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| Chiffre | XChaCha20-Poly1305 AEAD |
Jede Änderung am Chiffretext führt dazu, dass die Entschlüsselung fehlschlägt. Der Server überprüft vor der Freigabe des Chiffretexts, dass der Downloader das korrekte Passwort kennt, mithilfe eines aus dem Verschlüsselungsschlüssel abgeleiteten Einweg-Tokens.