
У меня есть хорошая 8-ядерная машина Windows 7, на которой я развернул несколько виртуальных машин в VMWare Workstation. Я хочу иметь возможность запускать виртуальную машину удаленно, выполняя что-то вроде "vmrun -T ws H:\VMWare\VM1\VM1.vmx nogui". Я могу предположить, что на хосте всегда есть пользователь, вошедший в систему, и это всегда один и тот же пользователь.
Локально команда выполняется нормально, но проблема возникает при попытке запустить ее удаленно.
Сделать это с ssh cygwin невозможно, потому что vmrun каким-то образом требует доступа к локальному экрану, что, насколько мне известно, невозможно в ssh cygwin, поскольку он работает как служба Windows. Я знаю, что могу написать пару приложений, чтобы обойти эту проблему, одно из которых запускается при входе пользователя в систему, а другое вызывается удаленным пользователем, который посылает команды первому через IPC. У меня есть сильное ощущение, что кто-то уже написал такое приложение, так что мне не нужно тратить время на изобретение велосипеда.
Я не думаю, что другие способы связи, которые полагаются на учетные данные Windows, достаточно безопасны, поэтому я предпочитаю не использовать инструменты вроде psexec, которые можно легко перехватить и расшифровать с помощью радужных таблиц (у меня нет сервера Radius). Или, может быть, я ошибаюсь, и они действительно безопасны?
решение1
Я делаю именно это все время, используя Cygwin ssh
для переадресации порта на 3389. Затем вы можете подключиться к своей рабочей станции по RDP (через туннель ssh, так что это должно развеять ваши опасения по поводу учетных данных Windows), запустить рабочую станцию виртуальной машины, запустить нужные вам виртуальные машины и выйти.
решение2
Вы можете довольно легко выполнить команду удаленно, используяPsExec
. Конечно, для своей работы он использует механизмы аутентификации Windows.
решение3
Наконец я нашел решение, которое подходит мне лучше всего:
Дело в том, чтобыне для того, чтобызапустить sshd как службу Windows, но из личного автозапуска пользователя (возможно, как скрытое окно). Вот и все. Единственный трюк здесь в том, что мне нужно запустить его как процесс с повышенными правами.
Для интерактивного запуска cygwin sshd в Windows 7 необходимо выполнить следующие шаги. (Я предполагаю, что cygwin установлен C:\cygwin
и содержит openssh
пакет):
- Установите
sshd
для службы в апплете «Администрирование\Службы» значение «Ручной запуск» или «Отключено». - Взять на себя управление
C:\cygwin\var\empty
папкой - (необязательно — для отладки) Убедитесь, что при запуске
/usr/bin/sshd -D
с повышенными привилегиями cygwin у вас есть доступ по ssh к вашему хосту. - (необязательно — для отладки) Убедитесь, что при запуске
C:\cygwin\bin\run -p C:\cygwin\bin /usr/sbin/sshd -D
из командной строки с повышенными привилегиями вы по-прежнему получаете тот же доступ, что и в пункте 3. Не забудьтеsshd.exe
затем завершить процесс с помощью диспетчера задач. - Создайте новую задачу, которая запускает эту команду под повышенными учетными данными сразу после входа в систему. Смотритеэта ветка форума, чтобы узнать, как это сделать
- Войдите в систему по SSH с удаленного хоста и выполните
vmrun -T ws start ...
команду так же, как вы бы сделали это локально, и все заработает так, как и ожидалось.
Надеюсь, это поможет тем из вас, кто предпочитает использовать SSH-авторизацию для выполнения административных задач.
Обратите внимание, что для того, чтобы это работало, пользователю необходимо фактически войти на хост (я считаю, что лучше всего сделать это интерактивно (т. е. не через RDP), но я не проверял эту теорию), поэтому это решение лучше всего подходит для домашней/небольшой офисной сети, и, возможно, оно не подойдет для выделенного сервера, если только вы не настроите его с помощью «автоматического входа» (но автоматический вход имеет свои собственные проблемы безопасности, которые могут легко свести на нет преимущества отключения общего ресурса $ADMIN).