如何通过 ssh 在 Windows 上远程启动 VMWare 机器或任何其他程序?

如何通过 ssh 在 Windows 上远程启动 VMWare 机器或任何其他程序?

我有一台不错的 8 核 Windows 7 机器,我在 VMWare Workstation 中部署了几个虚拟机。我希望能够通过执行类似“vmrun -T ws H:\VMWare\VM1\VM1.vmx nogui”的命令来远程启动虚拟机。我可以假设主机上始终有一个用户登录,并且始终是同一个用户。

该命令在本地运行良好,但当我尝试远程运行它时出现问题。

使用 cygwin 的 ssh 执行此操作是不可能的,因为 vmrun 需要访问本地屏幕,据我所知,这在 cygwin 的 ssh 中是不可能的,因为它作为 Windows 服务运行。我知道,我可以编写一对应用程序来解决这个问题,一个在用户登录时启动,另一个由远程用户调用,通过 IPC 向第一个用户发送命令。我有一种强烈的感觉,有人已经编写了这样的应用程序,所以我不需要浪费时间重新发明轮子。

我认为其他依赖 Windows 凭据的通信方式不够安全,因此我宁愿不使用 psexec 之类的工具,因为它们很容易被彩虹表嗅探和解密(我没有 radius 服务器)。或者也许我错了,它们确实很安全?

答案1

我一直都是这样做的,使用 Cygwinssh将端口转发到 3389。然后您可以通过 RDP 进入您的工作站(通过 ssh 隧道,因此应该可以减轻您对 Windows 凭据的担忧),启动 VM 工作站并播放您想要的 VM,然后退出。

答案2

你可以使用以下命令轻松远程执行命令PsExec。当然,它依赖Windows身份验证机制才能工作。

答案3

最终我找到了最适合我的解决方案:

重点是将 sshd 作为 Windows 服务运行,但从用户的个人启动(可能作为隐藏窗口)运行。就是这样。这里唯一的技巧是我需要将其作为提升的进程运行。

要在 Windows 7 中以交互方式启动 cygwin sshd,需要遵循以下步骤。(我假设 cygwin 已安装到C:\cygwin,并且它包含openssh软件包):

  1. 将管理工具\服务小程序中的服务设置sshd为“手动启动”或“已禁用”
  2. C:\cygwin\var\empty取得文件夹所有权
  3. (可选 - 用于调试)确保当您/usr/bin/sshd -D在提升的 cygwin 提示符下运行时,您可以获得对主机的 ssh 访问权限。
  4. (可选 - 用于调试)确保当您C:\cygwin\bin\run -p C:\cygwin\bin /usr/sbin/sshd -D从提升的命令提示符启动时,您仍然可以获得与第 3 点相同的访问权限。请记住sshd.exe随后使用任务管理器终止该进程。
  5. 创建新任务,在您登录后立即以提升的凭据启动此命令。请参阅此论坛主题了解如何执行此操作
  6. 使用 ssh 从远程主机登录并vmrun -T ws start ...像在本地执行一样运行命令,一切都按预期工作。

我希望它可以帮助那些喜欢坚持使用 ssh 授权执行管理任务的人。

请注意,要使其工作,用户需要实际登录到主机(我认为最好以交互方式进行(即不通过 rdp),但我没有测试过这个理论)所以这种解决方案最适合家庭/小型办公网络,也许它不适合专用服务器,除非您使用“自动登录”对其进行配置(但自动登录本身有安全问题,这很容易抵消禁用 $ADMIN 共享的好处)

相关内容