Привет, ребята, нужна небольшая помощь. Если кто-то сможет направить меня в правильном направлении — буду очень признателен. Я пытаюсь сделать 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, который получается:
Может кто подскажет, в чем косяк? Кажется, почти получилось. Спасибо!
Вот что у меня есть сейчас:
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, который получается:
Может кто подскажет, в чем косяк? Кажется, почти получилось. Спасибо!
