Аутентификация OpenStackClient через переменные окружения

Опубликовано

На все данные актуальны

Чтобы OpenStackClient мог управлять облачной инфраструктурой, необходимо получить данные для аутентификации и указать их в переменных окружения. Ниже мы покажем, как это сделать для Windows, Linux и macOS, включая сохранение скрипта аутентификации локально.

Внимание: Хранение пароля в скриптах или истории команд может привести к его компрометации. Для безопасности используйте интерактивный ввод пароля (см. примеры ниже).

Предварительные требования

  1. Вы должны иметь учётную запись в личном кабинете Сервер Молл Cloud. О том, как зарегистрировать учётную запись — смотрите инструкцию: “Регистрация аккаунта”.
  2. Вы должны заказать услугу “Облачная инфраструктура” и получить сообщение о её готовности к работе на электронную почту, привязанную к вашему аккаунту, или в личном кабинете Сервер Молл Cloud.
  3. В системе должны быть установлены Python и OpenStackClient в соответствии с инструкцией: “Установка OpenStackClient”.

I. Получение пароля из панели управления услугой

Пароль для аутентификации хранится в облачной консоли Сервер Молл Cloud. Чтобы его получить, выполните следующее:

  1. Войдите в панель управления Сервер Молл Cloud. О том, как это сделать, смотрите в инструкциях:
    1. Если двухфакторная аутентификация (2FA) не используется, см. “Вход в панель управления”. 
    2. Если 2FA подключена, см. “Вход в панель управления с использованием 2FA”.
  2. Выберите пункт главного меню “Услуги”.
    Вы перейдёте на страницу “Продукты/услуги”.
  3. Выберите облачную инфраструктуру, в которой требуется аутентификация.


    Вы перейдёте на панель управления услугой “Облачная инфраструктура”.
  4. В разделе “Management Panel” нажмите на кнопку “Click to copy” (с изображением двух листов бумаги), которая находится в строке “Password”.


    Пароль для аутентификации будет скопирован в буфер обмена, о чём скажет сообщение “The data has been successfully copied to the clipboard”.

II. Получение OpenRC-файла

OpenRC-файл вы можете скачать из облачной консоли, выполнив следующие шаги:

  1. Войдите в облачную консоль. Как это сделать, смотрите в инструкции: “Вход в панель управления облачной инфраструктурой”.
  2. Нажмите на иконку пользователя, которая находится в правом верхнем углу панели управления.


    Откроется выпадающее меню действий пользователя.
  3. Выберите пункт меню “Получить файл OpenRC”.

  4. Нажмите на поле “Тип”, чтобы раскрыть список.
  5. Выберите “Тип пароля”.
  6. Нажмите “OK”.

  7. Откроется диалоговое окно для сохранения OpenRC-файла.
  8. Сохраните OpenRC-файл локально.

III. Аутентификация из Windows

Чтобы пройти аутентификацию в облачной инфраструктуре, вы должны установить переменные окружения Windows.

Здесь мы рассмотрим, как создать скрипт для установки параметров окружения через PowerShell, CMD, Git Bash, а также покажем, как быстро очистить переменные в текущем сеансе, если вам, например, нужно переключиться на другую облачную инфраструктуру.

Аутентификация с помощью PowerShell

Мы создадим скрипт, в котором укажем все необходимые данные для аутентификации, в том числе пароль либо используем механизм запроса пароля у пользователя.

Создание скрипта

  1. Создайте скрипт
    Создайте файл с расширением *.ps1, где будут храниться переменные окружения. Например: os_auth.ps1.
  2. Задайте структуру скрипта
    Скопируйте в созданный файл следующее содержимое:
        
    $env:OS_AUTH_URL="https://cli.pbcloud.services:5000/v3/"
    $env:OS_USERNAME="<OS_USERNAME>"
    $env:OS_PROJECT_ID="<OS_PROJECT_ID>"
    $env:OS_PROJECT_DOMAIN_NAME="<OS_PROJECT_DOMAIN_NAME>"
    $env:OS_USER_DOMAIN_NAME="<OS_USER_DOMAIN_NAME>"
    $env:OS_REGION_NAME="RegionOne"
    $env:OS_INTERFACE="public"
    $env:OS_IDENTITY_API_VERSION=3
  1. Заполните скрипт значениями из OpenRC-файла
    Замените значения-заполнители в угловых скобках <…> фактическими значениями для вашего проекта из полученного ранее, в разделе II, OpenRC-файла, исключая сами скобки, для следующих параметров: <OS_USERNAME>, <OS_PROJECT_ID>, <OS_PROJECT_DOMAIN_NAME>, <OS_USER_DOMAIN_NAME>.

    Результат заполнения значениями может выглядеть, например, так:
        $env:OS_AUTH_URL="https://cli.pbcloud.services:5000/v3/"
    $env:OS_USERNAME="wuofcwvh"
    $env:OS_PROJECT_ID="f805701a98324d3398b5365707e2fd4c"
    $env:OS_PROJECT_DOMAIN_NAME="my-domain-31-715-725-1746533363"
    $env:OS_USER_DOMAIN_NAME="my-domain-31-715-725-1746533363"
    $env:OS_REGION_NAME="RegionOne"
    $env:OS_INTERFACE="public"
    $env:OS_IDENTITY_API_VERSION=3
  1. Выберите способ получения пароля
    Если вы хотите сохранить пароль от облачной инфраструктуры в скрипте, то добавьте в него строку:
        $env:OS_PASSWORD = "<OS_PASSWORD>"
  2. где замените <OS_PASSWORD> на пароль от облачной инфраструктуры, полученный вами в разделе I. “Получение пароля из панели управления услугой”.

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

    Более безопасным видится метод, когда пароль будет запрашиваться каждый раз при настройке переменных окружения. Для реализации этого метода, вместо прямого указания пароля,  добавьте в скрипт следующий код:

        
    $pass = Read-Host -AsSecureString "OpenStack password"
    $BSTR = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)
    try {
      $plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
    } finally {
      [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
    }
    $env:OS_PASSWORD = $plain


    Этот код позволит запросить у пользователя пароль для аутентификации в облачной инфраструктуре и сохранит его в переменных окружения для текущего сеанса, локально пароль в этом случае не сохраняется.

Использование скрипта

  1. Разрешите выполнение локальных скриптов
    Если это необходимо, то разрешите выполнение скриптов, созданных локально, выполнив команду:
        Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
  2. На запрос: “Вы хотите изменить политику выполнения?” нажмите клавишу Y для разрешения выполнения локальных скриптов, а затем нажмите клавишу Enter.

    Локальные скрипты теперь могут выполняться без подписи, а загруженные из интернета должны быть подписаны доверенным издателем (иначе PowerShell заблокирует их выполнение). Данная команда действует в пределах сеанса, если окно PowerShell будет закрыто, то выданное разрешение будет отменено.

  1. Выполните скрипт
  2. Запустите в PowerShell скрипт аутентификации. Например, для скрипта os_auth.ps1, находящегося в текущем каталоге, команда запуска будет выглядеть следующим образом:

        .\os_auth.ps1


    Скрипт установит переменные окружения для аутентификации в облачной инфраструктуре через OpenStackClient.

Очистка переменных окружения в текущем сеансе

Если вам нужно очистить переменные окружения в текущем сеансе, например, для безопасности или переключения на другую облачную инфраструктуру, выполните в PowerShell следующие команды:

    
# Удаление всех переменных окружения, начинающихся с "OS_"
Get-ChildItem Env:OS_* | Remove-Item

# Очистка переменных, использовавшихся для хранения пароля (если применялся SecureString)
if ($pass -ne $null) { $pass = $null }
if ($plain -ne $null) { $plain = $null }

Это удалит все переменные окружения с префиксом OS_ и обнулит временные переменные, использовавшиеся для хранения пароля.

Аутентификация через CMD

Мы создадим скрипт для командной строки Windows (CMD.EXE), в котором укажем все необходимые данные для аутентификации, в том числе пароль либо используем механизм запроса пароля у пользователя.

Создание скрипта

  1. Создайте скрипт
    Создайте файл с расширением *.cmd, где будут храниться переменные окружения. Например: os_auth.cmd.
  2. Задайте структуру скрипта
    Скопируйте в созданный файл следующее содержимое:
        
    @echo off
    set "OS_AUTH_URL=https://cli.pbcloud.services:5000/v3/"
    set "OS_USERNAME=<OS_USERNAME>"
    set "OS_PROJECT_ID=<OS_PROJECT_ID>"
    set "OS_PROJECT_DOMAIN_NAME=<OS_PROJECT_DOMAIN_NAME>"
    set "OS_USER_DOMAIN_NAME=<OS_USER_DOMAIN_NAME>"
    set "OS_REGION_NAME=RegionOne"
    set "OS_INTERFACE=public"
    set "OS_IDENTITY_API_VERSION=3"

  3. Если хотите, чтобы переменные окружения сохранились в реестре для следующих сеансов, то используйте вместо set команду setx. Однако сохранение пароля командой setx нежелательно с точки зрения безопасности и допустимо только в тестовых и учебных задачах. После выполнения setx закройте CMD и откройте его заново, чтобы новые значения начали использоваться.

  1. Заполните скрипт значениями из OpenRC-файла
  2. Замените значения-заполнители в угловых скобках <…> фактическими значениями для вашего проекта из полученного ранее, в разделе II,  OpenRC-файла, исключая сами скобки, для следующих параметров: <OS_USERNAME>, <OS_PROJECT_ID>, <OS_PROJECT_DOMAIN_NAME>, <OS_USER_DOMAIN_NAME>.

    Результат заполнения значениями может выглядеть, например, так:

        
    @echo off
    set "OS_AUTH_URL=https://cli.pbcloud.services:5000/v3/"
    set "OS_USERNAME=wuofcwvh"
    set "OS_PROJECT_ID=f805701a98324d3398b5365707e2fd4c"
    set "OS_PROJECT_DOMAIN_NAME=my-domain-31-715-725-1746533363"
    set "OS_USER_DOMAIN_NAME=my-domain-31-715-725-1746533363"
    set "OS_REGION_NAME=RegionOne"
    set "OS_INTERFACE=public"
    set "OS_IDENTITY_API_VERSION=3"

  1. Выберите способ получения пароля
    Если вы хотите сохранить пароль от облачной инфраструктуры в скрипте, то добавьте в него строку:
        set "OS_PASSWORD=<OS_PASSWORD>"
  2. где <OS_PASSWORD> замените на пароль от облачной инфраструктуры, полученный вами в разделе I. “Получение пароля из панели управления услугой”.

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

    Более безопасным является метод, когда пароль будет запрашиваться каждый раз при настройке переменных окружения. Для реализации этого метода, вместо прямого указания пароля,  добавьте в скрипт следующую строку:

        set /p OS_PASSWORD=OpenStack password:


    Эта строка запрашивает у пользователя пароль (ввод будет виден) для аутентификации в облаке и устанавливает его как переменную окружения только для текущего сеанса, не сохраняя на диске.

Использование скрипта

Запустите в CMD (командной строке) скрипт аутентификации. Например, для скрипта os_auth.cmd, находящегося в текущем каталоге, команда запуска будет выглядеть следующим образом:

    call os_auth.cmd

Скрипт установит переменные окружения для аутентификации в облачной инфраструктуре через OpenStackClient.

Очистка переменных окружения в текущем сеансе

Если вам нужно очистить переменные окружения в текущем сеансе, например, в целях безопасности или чтобы аутентифицироваться в другой облачной инфраструктуре, то выполните в CMD (командной строке) следующую команду:

    #Удаление всех переменных окружения, начинающихся с "OS_"
for /f "tokens=1 delims==" %v in ('set OS_ 2^>nul') do set "%v="

Все переменные окружения, начинающиеся на “OS_”, будут очищены.

Внимание: Очистка переменных окружения не гарантирует полное удаление данных из памяти ОС. Для максимальной безопасности перезапустите сеанс консоли/терминала после работы с конфиденциальными данными.

Аутентификация через Git for Windows (Git Bash)

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

  1. Запустите Git Bash
  2. Все дальнейшие операции будут выполняться в терминале Git Bash.

  1. Найдите путь к openstack.exe
  2. В Git Bash не всегда прописаны пути, которые есть в Windows, в частности путь к папке, где содержатся скрипты Python и OpenStackClient. Найдём этот путь:

        /c/Windows/System32/where.exe openstack.exe


    Результат вывода может быть, например, таким:

        C:\Users\testuser\AppData\Local\Programs\Python\Python313\Scripts\openstack.exe


    Если команда не возвращает путь, убедитесь, что OpenStackClient установлен корректно, в соответствии с инструкцией: “Установка OpenStackClient”.

  1. Добавьте полученный путь в PATH Git Bash
    Добавьте следующий блок кода в терминал Git Bash, заменив <Путь_к_скриптам> на путь, полученный на предыдущем шаге, но без имени файла openstack.exe:
        
    # Вставьте вместо <Путь_к_скриптам> Windows‑путь к папке со скриптами
    win_path='<Путь_к_скриптам>'
    
    # Преобразуем Windows‑путь в Unix‑вид для Git Bash
    unix_path=$(cygpath -u "$win_path")
    
    # Добавим путь в Unix‑виде в PATH, если его ещё нет
    grep -Fqx "export PATH=\"$unix_path:\$PATH\"" ~/.bashrc 2>/dev/null || echo "export PATH=\"$unix_path:\$PATH\"" >> ~/.bashrc
    
    # Подключаем ~/.bashrc из ~/.bash_profile, чтобы изменения PATH из ~/.bashrc применялись автоматически при новом запуске Git Bash (добавляем строку только если её ещё нет).
    grep -Fqx 'source ~/.bashrc' ~/.bash_profile 2>/dev/null || echo 'source ~/.bashrc' >> ~/.bash_profile
    
    # Применим изменения в текущем сеансе
    source ~/.bashrc

  2. Результат может выглядеть, например, так:

        win_path='C:\Users\testuser\AppData\Local\Programs\Python\Python313\Scripts'
    unix_path=$(cygpath -u "$win_path")
    grep -Fqx "export PATH=\"$unix_path:\$PATH\"" ~/.bashrc 2>/dev/null || echo "export PATH=\"$unix_path:\$PATH\"" >> ~/.bashrc
    grep -Fqx 'source ~/.bashrc' ~/.bash_profile 2>/dev/null || echo 'source ~/.bashrc' >> ~/.bash_profiles
    ource ~/.bashrc


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

        openstack --version


    Если вы увидите версию OpenStackClient (например, openstack 8.2.0), то путь добавлен успешно и при следующем запуске Git Bash добавленный путь будет доступен автоматически.

  1. Запустите OpenRC-файл
    Для запуска скрипта используйте команду вида:
        source <(tr -d '\r' < "<путь_и_имя_OpenRC-файла>")

  2. где:

    <путь_и_имя_OpenRC-файла> — Путь к OpenRC-файлу, который указывается в Unix-стиле, где используются прямые слеши вместо обратных, а буква диска (например, C:) заменяется на префикс (например, /c/).

    Например, для файла openrc.sh, находящегося в директории C:\downloads\, команда будет выглядеть так:

        source <(tr -d '\r' < "/c/downloads/openrc.sh")


    Эта команда выполнит скрипт openrc.sh, который запросит пароль для облака у пользователя и установит переменные окружения для аутентификации.

  1. Введите пароль
    На сообщение вида: “Please enter your OpenStack Password for project <PROJECT> as user <USER>” введите пароль от облачной инфраструктуры, полученный вами в разделе: “I. Получение пароля из панели управления услугой”.

    Если по какой-то причине пароль не был запрошен, введён неверно или вы пропустили его ввод, то задайте пароль вручную:
        read -rsp "Пароль OpenStack: " OS_PASSWORD; echo; export OS_PASSWORD
  1. Проверьте авторизацию
        openstack token issue
  2. При успешной авторизации отобразится информация о сгенерированном токене авторизации.

  1. Готово
    Теперь вы можете управлять облаком через OpenStackClient из консоли Git Bash.

  2. Примечание: После закрытия Git Bash сеанс аутентификации (переменные окружения из OpenRC) сбрасывается. Для повторной аутентификации запустите openrc.sh снова (см. шаг 4). Путь в PATH остаётся — он сохранён в ~/.bashrc.

Очистка переменных окружения в текущем сеансе

Для очистки переменных окружения в текущем сеансе, используйте команду:

    unset $(env | grep -E '^OS_' | cut -d= -f1)

Переменные окружения с префиксом «OS_» будут удалены. Чтобы гарантировать их полное удаление, рекомендуется перезапустить терминал.

IV. Аутентификация из Linux и macOS

Чтобы установить переменные окружения для работы OpenStackClient, нужно запустить openrc.sh, процедура получения которого показана в разделе “II. Получение OpenRC-файла”. 

  1. Запустите OpenRC-файл
    Для запуска используйте команду вида:
        source <путь>/openrc.sh
  2. где:
    <путь> — это путь к файлу openrc.sh.

    Например, если openrc.sh находится в текущей директории:

        source openrc.sh

    Или, например, если openrc.sh находится в директории /home/ubuntu/

        source /home/ubuntu/openrc.sh


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

  1. Введите пароль
    На сообщение вида: “Please enter your OpenStack Password for project as user ” введите пароль от облачной инфраструктуры, полученный вами в разделе: “I. Получение пароля из панели управления услугой”.

    Если по какой-то причине пароль не был запрошен, введён неверно или вы пропустили его ввод, то задайте пароль вручную.
    • bash (Linux/macOS):
          read -rsp "Пароль OpenStack: " OS_PASSWORD; echo; export OS_PASSWORD
    • zsh (macOS по умолчанию):
          read -rs "OS_PASSWORD?Пароль OpenStack: "; echo; export OS_PASSWORD

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

  1. Проверьте авторизацию
        openstack token issue
  2. При успешной авторизации отобразится информация о сгенерированном токене авторизации.

  1. Готово
    Теперь вы можете управлять облаком из терминала.

  2. Примечание: Переменные окружения, установленные через source openrc.sh, действуют только в текущем сеансе терминала и сбрасываются после его закрытия. Для повторной аутентификации снова выполните шаг 1 (запуск openrc.sh).

Очистка переменных окружения в текущем сеансе

Для очистки переменных окружения в текущем сеансе, используйте команду:

    unset $(env | grep -E '^OS_' | cut -d= -f1)

Переменные окружения с префиксом «OS_» будут удалены. Чтобы гарантировать их полное удаление, рекомендуется перезапустить терминал.

Что дальше?

После успешной аутентификации вы можете полноценно управлять облачной инфраструктурой: создавать, изменять и удалять ресурсы, настраивать сети и политики безопасности, отслеживать состояние сервисов и т. д.

Где искать нужные команды:

  • Подробные CLI‑команды для работы с конкретными типами ресурсов собраны в соответствующих подразделах раздела “Облачная инфраструктура”.
  • Команды для получения сводной информации о ресурсах проекта и состоянии облака вынесены в подраздел “Команды CLI для сбора сведений о ресурсах проекта”.