Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    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 Виртуальная Среда
    [РЕШЕНО]Как лучше всего запускать одну VM удаленно?

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [РЕШЕНО]Как лучше всего запускать одну VM удаленно?, Proxmox Виртуальная Среда
     
    iouej
    Guest
    #1
    0
    13.11.2020 14:52:00
    Привет! Я настроил игровую VM на Windows 10 для моего младшего брата на своем сервере, к которой он подключается через Parsec. Parsec работает только когда VM включена и работает, но держать VM постоянно включенной – это пустая трата ресурсов. Чтобы выключить VM, можно сделать это, когда ты уже подключен через Parsec, но я пока не могу придумать простой способ, чтобы он мог запускать VM, а потом уже Parsec. Похоже, что пользователь PVE не может иметь права на одной VM, и я не хочу давать ему возможность взорвать мои остальные VM. Заранее спасибо за помощь!

    EDIT: Идеальный вариант был бы – запускать VM одним кликом, когда он запускает Parsec, но я не уверен, как это можно реализовать.
     
     
     
    dylanw
    Guest
    #2
    0
    13.11.2020 15:55:00
    Ты на самом деле можешь сделать именно это в PVE:
    1. Создай пользователя для своего брата (datacenter->permissions->users->add), с Realm как Proxmox VE authentication server.
    2. Создай новую роль в системе с теми привилегиями, которые нужны твоему брату (permissions->roles->create). Думаю, в данном случае тебе понадобится VM.PowerMgmt для управления питанием и VM.Audit, чтобы видеть ВМ из веб-интерфейса (см. [1]).
    3. В разделе permissions выбери "Add->User Permission" и установи следующие параметры: Path: /vms/VMID User: brother@pve Role: роль из шага 2.
    4. Теперь твой брат может войти в веб-интерфейс, но будет видеть только свою ВМ и сможет только просматривать конфигурацию и управлять опциями питания. Подробности смотри в разделе управления пользователями руководства администратора [2].
    [1] https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pveum_permission_management
    [2] https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_user_management

    Редактирую: И извини, я не знаком с Parsec, так что не смогу дать никаких советов по запуску ВМ оттуда.
     
     
     
    iouej
    Guest
    #3
    0
    14.11.2020 17:05:00
    Спасибо от моего младшего брата, сработало идеально! Теперь я получил доступ через UI ровно к этой VM.
     
     
     
    nozama
    Guest
    #4
    0
    16.03.2022 06:55:00
    Я тоже заинтересован в решении "одна кнопка", потому что большинство моих коллег работают на Mac и вообще ничего не знают о VM или панели управления Proxmox. Очень нужно иметь какой-нибудь скрипт, который я могу создать в Apple Script editor и превратить в исполняемый файл, чтобы они могли просто дважды кликнуть по нему, и Windows VM запустится, готовая к удалённому подключению. Спасибо.
     
     
     
    bingsin
    Guest
    #5
    0
    16.03.2022 09:22:00
    Привет, ты можешь использовать Microsoft Remote Desktop, или использовать Spice. https://git.proxmox.com/?p=pve-manager.git;a=blob_plain;f=spice-example-sh;hb=HEAD
     
     
     
    William18181
    Guest
    #6
    0
    16.03.2024 18:42:00
    Точно такая же ситуация. У меня VM на Windows, и я хотел найти решение с возможностью включения её в один клик для моего брата. Написал следующий Powershell скрипт. Обратите внимание, что вам нужно будет задать свои значения по умолчанию в блоке `param()` в начале скрипта, чтобы соответствовать вашим данным для входа. Если вы хотите повторно использовать скрипт с аргументами, отличными от значений по умолчанию, вот несколько примеров того, как его вызвать: .\VMControl.ps1 123 on .\VMControl.ps1 123 off root@pam password nodename 192.168.1.10:8006 .\VMControl.ps1 -VM_ID "123" -OnOrOff "on" -Username "root@pam" -Password "password" -NodeName "nodename" -ProxmoxHost "192.168.1.10:8006" Я попытался добавить информативное сообщение об ошибке, если какие-то параметры неверны. Написано на Powershell 5.1 с использованием Proxmox 8.1

    Код:

    # Описание: Этот скрипт используется для запуска или остановки VM на Proxmox сервере.

    param(
       [string]$VM_ID="101",
       [ValidateSet("on", "off")] [string]$OnOrOff = "on",
       [string]$Username = "root@pam",
       [string]$Password = "<your_password>",
       [string]$NodeName = "<your_node_name>",
       [string]$ProxmoxHost = "<your_ip_here>:8006"
    )
    $taskTimeout = 30 # Как долго ждать завершения задачи, прежде чем произойдет таймаут.

    function ExitAndWaitForKeypress {
       Write-Host "Нажмите любую клавишу, чтобы продолжить..."
       $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
       exit 1
    }

    $curlCommand = "curl.exe -sS -k"; # -sS подавляет индикатор выполнения и показывает ошибки, -k игнорирует ошибки SSL сертификатов
    $proxmoxApiBaseUrl = "https://$ProxmoxHost/api2/json"
    # Аутентификация и получение тикетов
    $getTicketJson = ConvertFrom-Json (Invoke-Expression "$curlCommand -d 'username=$Username' --data-urlencode 'password=$Password' '$proxmoxApiBaseUrl/access/ticket'")
    $ticket = $getTicketJson.data.ticket
    $preventionToken = $getTicketJson.data.CSRFPreventionToken
    if (-not $ticket -or -not $preventionToken) {
       Write-Error "Не удалось получить аутентификационный тикет. Ваши учетные данные могут быть неверными."
       ExitAndWaitForKeypress
    }
    $curlCommandWithTicket = "curl.exe -sS -k -H `"Cookie: PVEAuthCookie=$ticket`" -H `"CSRFPreventionToken: $preventionToken`""
    # Создание задачи для запуска или остановки VM
    if ($OnOrOff -eq "on") {
       $curlPostTask = "$curlCommandWithTicket -X POST -i `"$proxmoxApiBaseUrl/nodes/$NodeName/qemu/$VM_ID/status/star­t`"" # -i для включения заголовков в вывод
    } elseif ($OnOrOff -eq "off") {
       $curlPostTask = "$curlCommandWithTicket -X POST -i `"$proxmoxApiBaseUrl/nodes/$NodeName/qemu/$VM_ID/status/shut­down`""
    } else {
       Write-Error "Недопустимое значение для OnOrOff: $OnOrOff. OnOrOff должно быть 'on' или 'off'."
    }
    $postResponse = Invoke-Expression $curlPostTask
    $responseParts = $postResponse.Split("`r`n");
    $postTaskResponseStatus = $responseParts[0] # Первая строка ответа содержит HTTP версию, код статуса и причину
    $postTaskResponseJson = ConvertFrom-Json $responseParts[-1] # JSON тело находится в конце ответа
    $upid = $postTaskResponseJson.data
    if (-not $upid) {
       Write-Error "Не удалось создать задачу. Proxmox вернул ответ: '$postTaskResponseStatus'."
       ExitAndWaitForKeypress
    }
    # Ожидание завершения задачи, вывод результата.
    $startTime = Get-Date
    do {
       $curlGetTaskStatus = "$curlCommandWithTicket -X GET `"$proxmoxApiBaseUrl/nodes/$NodeName/tasks/$upid/status`""
       $taskStatusJson = ConvertFrom-Json (Invoke-Expression $curlGetTaskStatus)
       if ($taskStatusJson.data.status -eq "stopped") {
           Write-Host "ЗАДАЧА ЗАВЕРШЕНА. | command='$($taskStatusJson.data.type)' | status='$($taskStatusJson.data.status)' | reason='$($taskStatusJson.data.exitstatus)' `r`n" -NoNewline
           break
       }
       Write-Host "ЗАДАЧА ВЫПОЛНЯЕТСЯ... | command='$($taskStatusJson.data.type)' | status='$($taskStatusJson.data.status)'"
       $currentTime = Get-Date
       $elapsedTime = ($currentTime - $startTime).TotalSeconds
       if ($elapsedTime -ge $taskTimeout) {
           Write-Error "Таймаут: Задача все еще выполняется после $taskTimeout секунд."
           break
       }
       Start-Sleep -Milliseconds 250
    } while ($true)
    ExitAndWaitForKeypress
     
     
     
    henriqueh12
    Guest
    #7
    0
    28.05.2025 05:01:00
    Как мне реализовать это, чтобы Alexa запускала VM?
     
     
     
    gfngfn256
    Guest
    #8
    0
    28.05.2025 09:06:00
    В принципе, это можно сделать, используя Home Assistant. По сути, вам понадобится что-то вроде следующей настройки:

    1. Интеграция Home Assistant Alexa.
    2. Интеграция Shell Command для Home Assistant.
    3. Вам нужно будет настроить необходимую shell_command либо через API с Proxmox, либо через SSH.
    4. Настройте скрипт в Home Assistant для этой shell_command.
    5. Сделайте этот скрипт доступным для Alexa.
    6. Создайте рутину в Alexa для этого доступного скрипта. Вы можете поискать информацию в интернете для любого из этих шагов — подобных решений уже реализовано немало. Есть даже интегрированные решения Home Assistant для Proxmox. Вот пример.

    ВНИМАНИЕ: Во всех вышеперечисленных ситуациях вы предоставляете доступ к своей PV-среде Alexa/HA — делайте это с полным пониманием и ответственностью!
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

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