# Datei senden — Passwort wird automatisch generiert, Link + Passwort werden ausgegeben $ 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 # 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/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
# 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
# Datei wird nach dem ersten Download endgültig gelöscht $ 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.
# Sie können nur den 10-stelligen Token anstelle der vollständigen URL verwenden $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ 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 dieselbe Verschlüsselungsbibliothek 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 fünf Möglichkeiten, es anzugeben:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
Generiert ein kryptografisch zufälliges 8-Zeichen-Passwort aus [0-9A-Za-z]. Nur beim send im Terminal verfügbar.
$ 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 |
--timeout DUR | Übertragungstimeout | auto |
--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 | auto |
-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
Standard: auto — geschätzt anhand der Dateigröße bei angenommenen 1 Mbps + 2 Minuten Puffer (Minimum 5 Minuten). Überschreiben mit --timeout 10m oder --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 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,"password":"aB3kL9mX"} # Herunterladen $ ttl --json get -p aB3kL9mX 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) und Dateiverwaltung (Auflisten und Löschen).
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 $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # Plan und Nutzung prüfen $ 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 # mit verlängerter TTL senden $ ttl send -t 30d large-backup.tar.gz # 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}]}
Gibt alle mit diesem Schlüssel hochgeladenen Dateien zurück. 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 |
| Beschränkung | Kostenlos | Orbit |
|---|---|---|
| Max. Dateigröße | 2 GB | 10 GB |
| Max. TTL | 7 Tage | 30 Tage |
| Uploads pro Tag | 10 | 50 |
| Speicherkontingent | — | 250 GB |
| Auflisten & Löschen | — | ✓ |
| 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 MB, 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.