# отправить файл — пароль генерируется автоматически, выводится ссылка + пароль $ 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 # скачать — пароль запрашивается интерактивно $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
CLI выполняет шифрование, загрузку, скачивание и расшифровку. Сервер никогда не видит ваш пароль или открытые данные.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# скачайте для вашей платформы из раздела релизов $ 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
# автогенерация пароля, TTL по умолчанию 7д $ ttl send report.xlsx
Если пароль не указан в терминале, CLI спрашивает:
No password provided. Generate one? [Y/n]:
Нажмите Enter или введите y для автогенерации.
$ ttl send -p mySecretPass -t 1h document.pdf
# файл безвозвратно удаляется после первого скачивания $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # истекает через 5 минут $ ttl send -t 30m meeting-link.txt # истекает через 30 минут $ ttl send -t 6h backup.tar.gz # истекает через 6 часов $ ttl send -t 1d daily-report.pdf # истекает через 1 день $ ttl send -t 3d project-archive.zip # истекает через 3 дня $ ttl send -t 5d design-assets.zip # истекает через 5 дней $ ttl send report.xlsx # истекает через 7 дней (по умолчанию)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
Пароль не отображается в терминале. Оригинальное имя файла сохраняется.
# можно использовать только 10-символьный токен вместо полного URL $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
По умолчанию файлы сохраняются в текущий каталог. Используйте -o / --output для указания другого каталога.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
Вы также можете скачивать и расшифровывать файлы в браузере, перейдя по ссылке напрямую. Веб-интерфейс использует ту же библиотеку шифрования и запрашивает пароль. Установка программ не требуется.
Пароль является основой ключа шифрования. Он никогда не покидает ваше устройство и никогда не отправляется на сервер. Есть пять способов его указать:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
Генерирует криптографически случайный 8-символьный пароль из [0-9A-Za-z]. Доступно только при send в терминале.
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
Пароль не отображается. При send сначала предлагается автогенерация. При get пароль запрашивается напрямую.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password виден в выводе ps aux и может сохраниться в истории оболочки (~/.bash_history). Избегайте использования в общих средах и скриптах. Используйте вместо этого --password-stdin или --password-file.--password-stdin# передача через echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # передача из менеджера паролей $ pass show ttl/key | ttl send --password-stdin data.zip # передача из переменной окружения $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
Читает первую строку из stdin. Полезно в скриптах, CI/CD-конвейерах и автоматизации. Если stdin не является терминалом и источник пароля не указан, CLI завершается с ошибкой (кроме режима --json, который автоматически генерирует пароль).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
Читает первую строку файла (завершающий перевод строки отбрасывается). Совместимо с Docker secrets (/run/secrets/), файлами Vault agent и подобными паттернами.
ttl.passwordЕсли пароль не указан явно, CLI ищет файл ttl.password рядом с программой, затем ~/.ttl/password. Первая строка используется как пароль.
-p / --password, --password-stdin и --password-file нельзя комбинировать. Автоматически обнаруженный файл ttl.password проверяется только при отсутствии всех перечисленных. Минимальная длина: 8 символов.| Флаг | Описание | По умолчанию |
|---|---|---|
-p, --password P | Пароль шифрования | интерактивно |
--password-stdin | Чтение пароля из stdin | |
--password-file F | Чтение пароля из файла | |
-t, --ttl DUR | Время жизни | 7d |
-b, --burn | Одноразовое чтение (однократное скачивание) | выкл |
--timeout DUR | Тайм-аут передачи | авто |
--server URL | URL сервера | https://ttl.space |
-h3, --http3 | Попробовать HTTP/3 (QUIC), откат на TCP | выкл |
--json | Вывод JSON в stdout (для скриптов и ИИ-агентов) | выкл. |
| Флаг | Описание | По умолчанию |
|---|---|---|
-p, --password P | Пароль расшифровки | интерактивно |
--password-stdin | Чтение пароля из stdin | |
--password-file F | Чтение пароля из файла | |
-o, --output DIR | Каталог вывода | текущий каталог |
--timeout DUR | Тайм-аут передачи | авто |
-h3, --http3 | Попробовать HTTP/3 (QUIC), откат на TCP | выкл |
--json | Вывод JSON в stdout (для скриптов и ИИ-агентов) | выкл. |
Бесплатно: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit добавляет: 14d 15d 28d 30d
По умолчанию: авто — рассчитывается из размера файла при скорости 1 Мбит/с + 2 минуты запаса (минимум 5 минут). Переопределяется через --timeout 10m или --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 # ссылка работает ровно один раз, истекает через 5 минут
# отправка — пароль генерируется автоматически в режиме JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"} # скачивание $ ttl --json get -p aB3kL9mX xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # ошибки возвращают ok:false {"ok":false,"error":"Link not found"}
В режиме --json весь вывод — структурированный JSON на stdout. Если при отправке пароль не указан, он генерируется автоматически и включается в ответ. Код выхода: 0 при успехе, 1 при ошибке.
Orbit открывает доступ к файлам большего размера (10 ГБ), более длительному хранению (30 дней) и управлению файлами (список и удаление).
API-ключ определяется автоматически: переменная окружения TTL_API_KEY, ttl.key рядом с программой или ~/.ttl/key. Используйте ttl activate для сохранения ключа или запишите его вручную в одно из этих мест.
# активировать ключ $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # проверить план и использование $ 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 # отправить с продлённым TTL $ ttl send -t 30d large-backup.tar.gz # показать последние загрузки $ 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 # удалить файл досрочно $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # удалить сохранённый ключ $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get или режим --json. Указанные ниже конечные точки предназначены для управления файлами 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}]}
Возвращает все файлы, загруженные с этим ключом. Требуется план Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
Возвращает 204 No Content при успехе. Требуется план Orbit. Файл должен принадлежать этому ключу.
| Статус | Значение |
|---|---|
401 | Недействительный или просроченный API-ключ |
403 | Функция требует план Orbit |
404 | Файл не найден или не принадлежит этому ключу |
429 | Превышен лимит запросов |
| Ограничение | Бесплатно | Orbit |
|---|---|---|
| Макс. размер файла | 2 ГБ | 10 ГБ |
| Макс. TTL | 7 дней | 30 дней |
| Загрузок в день | 10 | 50 |
| Квота хранилища | — | 100 ГБ |
| Список и удаление | — | ✓ |
| Мин. длина пароля | 8 символов | |
| Запросов на IP | 30 за 10 секунд | |
| Соединений на IP | 10 одновременных | |
Файлы шифруются на вашем устройстве перед загрузкой. Сервер хранит только зашифрованные данные и не может расшифровать ваши файлы.
| Компонент | Алгоритм / Значение |
|---|---|
| Формирование ключа | Argon2id (time=3, memory=64 MB, parallelism=1) |
| Шифр | XChaCha20-Poly1305 AEAD |
Любое изменение шифротекста приводит к ошибке расшифровки. Сервер проверяет, что скачивающий знает правильный пароль, прежде чем отдать шифротекст, используя односторонний токен, полученный из ключа шифрования.