Перейти к основному содержимому

tuna-cli

Установка​

Установка с помощью winget​

Откройте PowerShell и выполните команду:

winget install --id yuccastream.tuna ; powershell

Установка MSI пакета​

Скачайте последнюю версию tuna по ссылке и запустите установку дважды кликнув на файл.

Установщик для Windows x64 (требует прав администратора)
🖌 Проверка подлинности

Начиная с версии 0.27.4 все артефакты подписаны при помощи cosign. Для проверки оригинальности архива установите клиент cosign, скачайте публичный ключ и выполните проверку.

winget install GnuPG.Gpg4win
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_x64.msi" -OutFile "tuna_x64.msi"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_x64.msi.sig" -OutFile "tuna_x64.msi.sig"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna.asc" -OutFile "tuna.asc"
gpg --import tuna.asc
gpg --verify tuna_x64.msi.sig tuna_x64.msi

Установка вручную​

Откройте PowerShell и выполните команды по очереди:

winget install GnuPG.Gpg4win
cd $env:TEMP
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_amd64.zip" -OutFile "$env:TEMP\tuna_windows_amd64.zip"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_amd64.zip.sig" -OutFile "$env:TEMP\tuna_windows_amd64.zip.sig"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna.asc" -OutFile "$env:TEMP\tuna.asc"
gpg --import tuna.asc
gpg --verify tuna_windows_amd64.zip.sig tuna_windows_amd64.zip
Expand-Archive -Path "$env:TEMP\tuna_windows_amd64.zip" -DestinationPath "$env:TEMP\tuna" -Force
Copy-Item -Path "$env:TEMP\tuna\tuna.exe" -Destination "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps" -Force

Проверка работы​

Чтобы убедиться, что установка прошла корректно, выполните команду:

tuna help

Авторизация​

Зарегистрируйтесь в личном кабинете и войдите в CLI:

tuna login

CLI спросит способ входа:

  • через браузер — откроется страница подтверждения. Сессия хранится в системном хранилище ключей: Keychain в macOS, Credential Manager в Windows, Secret Service в Linux;
  • по ссылке — для машины без браузера, например сервера по SSH. CLI покажет ссылку и код: откройте ссылку на любом устройстве и проверьте, что код совпадает. CLI сам распознаёт вход по SSH и предлагает этот способ первым;
  • по API-ключу — вставьте ключ, CLI сохранит его в конфигурационный файл.

Чтобы не выбирать способ, передайте флаг: --web — через браузер, --no-browser — по ссылке. Если системного хранилища нет, добавьте --insecure-storage: сессия сохранится в файл credentials.json рядом с конфигурационным файлом.

Проверить вход и выйти:

tuna whoami # под каким аккаунтом вы вошли
tuna session list # все сессии аккаунта
tuna logout # отозвать сессию и удалить сохранённый ключ

Сессии можно посмотреть и отозвать в профиле.

Вход на сервере и в CI​

Там, где войти через браузер нельзя, используйте API-ключ. При создании ключа выберите набор «Для туннелей» или включите «Запуск туннелей» — без права tunnels:connect ключ не поднимает туннели. Передайте ключ через стандартный ввод, чтобы он не остался в истории оболочки:

echo "$TUNA_API_KEY" | tuna login --with-api-key

Или задайте переменную TUNA_API_KEY — тогда входить не нужно:

export TUNA_API_KEY=<ваш_ключ>
tuna http 8080
Старые токены

С tuna-cli 0.39 токены tt_…, флаг --token, переменная TUNA_TOKEN и команда tuna config save-token устарели. Они пока работают, но CLI предупреждает о замене: войдите через tuna login или перейдите на TUNA_API_KEY и --api-key. Как перейти на ноутбуке, сервере, в CI и сервисах — в инструкции Переход на сессии и API-ключи.

Пользуйтесь​

Все готово, чтобы приступить к работе. Запустите tuna с передачей порта и делитесь ссылкой с коллегами:

tuna http 8080
Постоянный адрес

При каждом запуске туннель получает новый адрес. Чтобы адрес не менялся, используйте свой бесплатный постоянный поддомен: tuna http 8080 --subdomain=<ваш-поддомен>. Поддомен привязан к аккаунту и работает только с вашим аккаунтом из шага Авторизация.

Что дальше?​

  • Изучите примеры настроек HTTP туннеля
  • Нужен доступ к сервису, не использующему HTTP? Узнайте подробнее в разделе по TCP туннелю