Руководство по использованию

← Home

Быстрый старт

# отправить файл — пароль генерируется автоматически, выводится ссылка + пароль
$ 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 выполняет шифрование, загрузку, скачивание и расшифровку. Сервер никогда не видит ваш пароль или открытые данные.

Установка

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

$ 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

$ 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)

$ 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

Браузер

Вы также можете скачивать и расшифровывать файлы в браузере, перейдя по ссылке напрямую. Веб-интерфейс использует ту же библиотеку шифрования и запрашивает пароль. Установка программ не требуется.

Управление паролем

Пароль является основой ключа шифрования. Он никогда не покидает ваше устройство и никогда не отправляется на сервер. Есть пять способов его указать:

1. Автогенерация (только отправка)

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: y
Generated password: aB3kL9mX

Генерирует криптографически случайный 8-символьный пароль из [0-9A-Za-z]. Доступно только при send в терминале.

2. Интерактивный ввод

$ 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 пароль запрашивается напрямую.

3. Флаг: -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.

4. Stdin: --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, который автоматически генерирует пароль).

5. Файл: --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 и подобными паттернами.

6. Автоматически обнаруженный файл: 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 URLURL сервера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 (для скриптов и ИИ-агентов)выкл.

Значения TTL

Бесплатно: 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

Копирование ссылки в буфер обмена (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Копирование ссылки в буфер обмена (Linux)

$ ttl send -p mypass123 file.pdf | xclip -sel clip

Одноразовый секрет

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# ссылка работает ровно один раз, истекает через 5 минут

Режим JSON (скрипты & ИИ-агенты)

# отправка — пароль генерируется автоматически в режиме 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

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

HTTP API

Загрузка и скачивание требуют шифровального конвейера CLI (Argon2id + XChaCha20-Poly1305 + блочный AEAD). Для скриптов используйте ttl send / ttl get или режим --json. Указанные ниже конечные точки предназначены для управления файлами Orbit.

Список файлов (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.

Удалить файл (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 ГБ
Макс. TTL7 дней30 дней
Загрузок в день1050
Квота хранилища100 ГБ
Список и удаление
Мин. длина пароля8 символов
Запросов на IP30 за 10 секунд
Соединений на IP10 одновременных

Шифрование

Файлы шифруются на вашем устройстве перед загрузкой. Сервер хранит только зашифрованные данные и не может расшифровать ваши файлы.

КомпонентАлгоритм / Значение
Формирование ключаArgon2id (time=3, memory=64 MB, parallelism=1)
ШифрXChaCha20-Poly1305 AEAD

Любое изменение шифротекста приводит к ошибке расшифровки. Сервер проверяет, что скачивающий знает правильный пароль, прежде чем отдать шифротекст, используя односторонний токен, полученный из ключа шифрования.