Описание проблемы настройки 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-версии. В принципе на этом можно и закончить, переведя всю работу в это окружение, но не у всех море свободных ресурсов, да и не совсем это удобно.
Проверьте, что в 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. Даже если у вас работает по федеративному пользователю, все равно удобнее сделать через сервисный аккаунт, потому что федерация живет недолго, а сервисный с ключом будет на постоянке.