Запустите графическое приложение через OpenSSH на Windows 10

Вопрос или проблема

Я хотел бы запустить графическое приложение на настольном компьютере с Windows 10 через встроенный сервер OpenSSH. Проблема в том, что, похоже, оно не отображает графический интерфейс в правильной сессии пользователя?

Приложение отображается в диспетчере задач, но не рендерится. Я нашел несколько (неуклюжих) обходных путей, которые, как предполагается, работают на Windows 7 и 8, но не совсем то, что работает на Windows 10. Предпочтительно, чтобы это не касалось изменения способа запуска приложения, а изменения того, как SSH-сервер запускает программы.

Я вошел через ssh как пользователь, который также вошел в сеанс рабочего стола на самом компьютере. На Linux вам нужно было бы указать, в каких сессиях X11 приложение должно запускаться, с помощью переменной окружения (например, DISPLAY=:0). Должен ли я делать что-то подобное в Windows, чтобы сказать оболочке, в каком контексте запускать приложение?

Похоже, это не просто
Давайте изобретем еще одно колесо

Сторона сервера

  • Прослушивание на порту UDP
  • Вызов ShellExecute(NULL,"open",...) на полученных пакетах
  • Способность открывать URL в браузере по умолчанию или запускать графические приложения, например, cmd/Taskmgr/mmc, которые просто всплывают на экране, все Linux_Xorg_SSH_DISPLAY=:0’ish
  • “Это работает на моем компьютере.” Работает на Microsoft Windows [Версия 10.0.19042.746]
  • Аутентификация не реализована
  • Не проверяется, что содержится в UDP-пакете или является ли он действительным для ShellExecute()

Сторона клиента

  • Отправить UDP-пакет для выполнения сервером
  • Сохранить IP-адрес сервера, указанный в argv, чтобы вы могли опустить его в следующий раз

Если служба OpenSSH в Windows не запущена, вы можете запустить ее от имени нужного пользователя. Для этого подойдет скрипт запуска.

Создайте ключи SSH пользователя в Windows (обычно вы это делаете):

 ssh-keygen

Примите расположение по умолчанию. Я протестировал его без парольной фразы.

Запустите OpenSSH, используя закрытый ключ пользователя в качестве ключа хоста:

start /min %SYSTEMROOT%\System32\OpenSSH\sshd -h %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa

Вы можете создать однострочный sshd.bat с вышеуказанным и связать его с shell:startup.

Ответ или решение

Запуск GUI приложения через OpenSSH на Windows 10 может показаться сложной задачей, так как стандартная реализация OpenSSH не поддерживает перехват графического контекста, необходимого для отображения интерфейсов GUI в сеансе рабочего стола. Однако, это можно осуществить, следуя нескольким ключевым шагам, о которых мы подробно поговорим.

Основные Шаги

  1. Подготовка Окружения SSH
    Убедитесь, что на вашем компьютере установлены и правильно настроены сервер OpenSSH и клиент SSH. Вы можете проверить их установку, выполнив команду ssh -V в командной строке. Если она успешно возвращает версию, то сервер установлен, и вы готовы к следующему шагу.

  2. Настройка SSH Доступа и Ключей
    Вам нужно создать SSH ключи для аутентификации. В командной строке выполните следующую команду:

    ssh-keygen

    Принять параметры по умолчанию, включая отсутствие пароля. После этого скопируйте публичный ключ в файл authorized_keys пользователя, под которым вы будете входить через SSH.

  3. Запуск OpenSSH-сервера
    Убедитесь, что служба OpenSSH запущена. Вы можете запустить ее через PowerShell или командную строку, используя следующую команду:

    Start-Service sshd

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

  4. Запуск GUI Приложений
    Чтобы GUI приложение запустилось корректно, вам нужно будет следовать определенной процедуре, так как Windows не предоставляет простой способ указания сеанса для GUI приложений через SSH.

    Варианты Решений

    1. Использование PowerShell
      Воспользуйтесь PowerShell для запуска нужного приложения. Запустите OpenSSH и используйте команду:

      Start-Process "C:\Path\To\YourApp.exe"

      Это должно запустить приложение в вашем активном сеансе рабочего стола.

    2. Использование Ntexec
      Если у вас возникли трудности с вышеуказанным методом, вы можете рассмотреть использование стороннего инструмента, такого как ntexec. Этот инструмент позволяет запускать GUI приложения через UDP пакеты, что может упростить задачу запуска и управления.

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

    // Слушаем UDP порт и выполняем команду
    ShellExecute(NULL, "open", "C:\\Path\\To\\YourApp.exe", NULL, NULL, SW_SHOWNORMAL);

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

Заключение

Работа с GUI приложениями через OpenSSH на Windows 10 требует понимания особенностей системы и использования дополнительных инструментов. Использование PowerShell в сочетании с OpenSSH может быть наиболее простым решением, однако, если вам требуется более сложный функционал, такие инструменты как ntexec могут оказаться полезными.

Рекомендации

  • Безопасность: Убедитесь, что при использовании UDP пакетов вы учитываете безопасность ваших данных, поскольку оставлять открытыми порты без надлежащей защиты может привести к серьезным проблемам.
  • Тестирование: Прежде чем развертывать передовые методы в продакшене, проведите тестирование на локальных системах.

Следуя этим рекомендациям, вы сможете успешно решить проблему запуска GUI приложений через OpenSSH на Windows 10, оптимизировав свой рабочий процесс и повысив общую эффективность.

Оцените материал
Добавить комментарий

Капча загружается...