Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Вызов VNC-консоли из Bash с использованием Proxmox API

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Вызов VNC-консоли из Bash с использованием Proxmox API, Proxmox Виртуальная Среда
     
    Zubin Singh Parihar
    Guest
    #1
    0
    14.09.2024 20:10:00
    Привет, ребята, нужна небольшая помощь. Если кто-то сможет направить меня в правильном направлении — буду очень признателен. Я пытаюсь сделать bash-скрипт, в котором заданы учётные данные Proxmox и VMID, а по ним выводится URL, который при клике откроет браузер и сразу даст доступ к VNC-консоле (через аутентификационный тикет). (Постлю пример с фиктивными данными)

    Вот что у меня есть сейчас:

    Bash:

    #!/bin/bash

    # Настройки API Proxmox
    PROXMOX_HOST="192.168.103.21:8006"
    API_USER="root@pam"
    API_PASSWORD="abcde12345"
    VM_ID=100

    # Шаг 1: Входим и получаем ticket и CSRFPreventionToken
    response=$(curl -k -s "https://${PROXMOX_HOST}/api2/json/access/ticket" \
       -d "username=${API_USER}&password=${API_PASSWORD}" \
       -H "Content-Type: application/x-www-form-urlencoded")
    TICKET=$(echo $response | jq -r '.data.ticket')
    CSRF_TOKEN=$(echo $response | jq -r '.data.CSRFPreventionToken')
    COOKIE="PVEAuthCookie=${TICKET}"

    # Шаг 2: Получаем текущий узел VM и её имя
    node_response=$(curl -k -s "https://${PROXMOX_HOST}/api2/json/cluster/resources?type=vm" \
       --cookie "PVEAuthCookie=$TICKET")
    NODE=$(echo $node_response | jq -r --arg VM_ID "$VM_ID" '.data[] | select(.vmid == ($VM_ID|tonumber)) | .node')
    VMNAME=$(echo $node_response | jq -r --arg VM_ID "$VM_ID" '.data[] | select(.vmid == ($VM_ID|tonumber)) | .name')

    # Шаг 3: Создаем VNC-токен специально для VNC доступа
    vnc_ticket_response=$(curl -k -s "https://${PROXMOX_HOST}/api2/json/nodes/$NODE/qemu/$VM_ID/vncproxy" \
       --cookie "PVEAuthCookie=$TICKET" \
       -H "CSRFPreventionToken: $CSRF_TOKEN" -d '')
    VNC_TICKET=$(echo $vnc_ticket_response | jq -r '.data.ticket')

    # Шаг 4: Генерируем URL для VNC с этим тикетом
    VNC_URL="https://${PROXMOX_HOST}/?console=kvm&novnc=1&vmid=${VM_ID}&vmname=${VMNAME}&node=${NODE}&resize=off&cmd=&vncticket=${VNC_TICKET}"

    echo "Откройте следующий URL в браузере, чтобы сразу получить доступ к VNC-консоли без дополнительной авторизации:"
    echo $VNC_URL

    Я думал, что так сработает, но в итоге получаю ошибку "Error 401: No ticket".

    Вот URL, который получается: https://192.168.2.51:8006/?console=...Z0yapSElgVzbKSEUFuMPZvL0qpjdCwjmAnhETKg7H3g==

    Может кто подскажет, в чем косяк? Кажется, почти получилось. Спасибо!
     
     
     
    rohankhanna
    Guest
    #2
    0
    09.11.2024 07:29:00
    @Zubin Singh Parihar, можешь сказать, решили эту проблему или нет? Потому что у меня в моем React-приложении такая же ошибка.
     
     
     
    shbaek
    Guest
    #3
    0
    16.12.2024 08:58:00
    Эта проблема уже решена? У меня тоже возникают трудности с ошибкой 401 no ticket... но я её решил.
     
     
     
    kkworkemail
    Guest
    #4
    0
    09.01.2025 10:41:00
    Не мог бы кто-нибудь поделиться решением этой проблемы? Я застрял на одном и том же месте.
     
     
     
    shbaek
    Guest
    #5
    0
    10.01.2025 01:55:00
    Пожалуйста, закодируйте vncticket в URL и попробуйте снова.
     
     
     
    kkworkemail
    Guest
    #6
    0
    10.01.2025 06:21:00
    Код: https://<HOST>:8086/?console=kvm&novnc=1&vmid=102&vmname=nginx-gui&node=innprox&resize=off&cmd=&vncticket=PVEVNC%3A6780AB52­%3A%3AsqhsA%2B2ZCDfnnazo2ge33nxYyJW76XmCROP0h0o4JJ4Py2Wwu8H5­Qw36T%2BNzAdOCaCvwaLgcauO5cWomeWT06bbFyHpPa5jubhXmfe2hnDNU14­%2B2HS3SMPGiLVgfrEyCPh8D213bNdMp3F7SWOZsONB6quIyWrfARZLKncXW­XRVW4NP2kUtg%2B%2B2rfIopzt68s6cGlvdRbbSQQNKDnYg6iORs%2Fw4895­CVRl%2FDOdfxIDGXFmJZcdJO0DF8lAJ8Cwocu2l2WC8q8ZbwVQTIb8sXRNld­i95xjPCOpoq84OUF1n99QqwibV%2FtAvflySH0hzX9VNCX%2Bzt2gP2m%2F3­pVR8urXA%3D%3D

    Это мой закодированный URL, который я пытаюсь использовать, но в интерфейсе NoVNC появляется ошибка 401 NO Ticket.

    Примечание: я пробую этот URL в режиме инкогнито. Если я вручную установлю PVEAuthCookie, то всё работает.
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры