Yandex CLI в WSL для Практикума

Yandex cli in WSL

Описание проблемы настройки WSL для работы с Yandex CLI

Есть одна небольшая особенность настройки WSL для работы с Yandex CLI. Дело в том, что облако открывается для всех студентов по отдельной ссылке, куда вводится учетная запись, созданная системой обучения. Зайти в Яндекс Облако через браузер по обычному пути не получается, потому что при авторизации по своей учебной учетной записи требуется двухфакторное подтверждение через почту, которая не доступна.

Из-за этого, когда мы пытаемся получить временный yc_token, нам открывается страница от нашего личного облака и токен выдается не тот, что нам нужен. Что же делать?

Есть вариант авторизации от имени федеративного пользователя. Идентификатор федерации можно получить от наставников курса. Но на этом история не заканчивается и у некоторых появляется трудность при использовании этого варианта. Что именно не так? Не всегда WSL запускает браузер и выдает ошибку. То есть если мы в консоли вводим запрос:

yc init --federation-id=<ID>

нам система выплевывает такое:

ERROR: federation id authentication is not supported on this system

Причем, у меня было, что и на WSL 2-ой версии тоже выдавало такую ошибку.

Но решение все же есть. Некий обходной путь, которым я и хочу поделиться.

Решение

Вариант 1 — через WSL, но изменив версию на 1

Установите WSL первой версии. Как это сделать можно прочитать в официальной инструкции.

Подключитесь к WSL и установите yc клиент.

Выполните авторизацию через федерацию. После подтверждения система активирует запуск браузера. Сразу откроется страница авторизации, куда нужно ввести свои учетные данные. Если этот способ у вас не сработал, переходите к второму варианту.

После этого настройте доступ к облаку через сервисный аккаунт.

В результате действий вы получите файлик key.json, который нужно скопировать в WSL, откуда вы хотите работать с yandex cloud CLI.

Вариант 2 — через Ubuntu на виртуальной машине

Мне было лень ставить WSL версии 1 и я нашел другой вариант. У меня уже было установлено приложение для создания виртуальных машин (ВМ) и я воспользовался им.

Создаем ВМ с Ubuntu Desktop-версии. В принципе на этом можно и закончить, переведя всю работу в это окружение, но не у всех море свободных ресурсов, да и не совсем это удобно.

Установите yc клиент.

Проверьте, что в Ubuntu имеется браузер.

Открываем терминал и пробуем авторизоваться через федерацию:

yc init --federation-id=<ID>

После подтверждения система активирует запуск браузера. Откроется страница авторизации, куда нужно ввести свои учетные данные. Готово — в данной консоли у нас есть доступ к облаку. Как же теперь перенести доступ на локальную машину в WSL?

Не уходя с виртуалки, настройте в ней доступ к облаку через сервисный аккаунт. В результате будет получен файл key.json.

Скачиваем данный файл (например, командой scp) с виртуальной машины по сети на локальную.

Загружаем данный файл в WSL.

Подключаемся к WSL и настраиваем профиль yc:

yc config profile create praktikum
yc config set service-account-key /path/to/key.json
yc config set cloud-id <ID облака>
yc config set folder-id <ID каталога>

Вместо praktikum можно ввести свое название.

Если все правильно сделано, то доступ будет работать.

P.S. Даже если у вас работает по федеративному пользователю, все равно удобнее сделать через сервисный аккаунт, потому что федерация живет недолго, а сервисный с ключом будет на постоянке.