我有一台不错的 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
软件包):
- 将管理工具\服务小程序中的服务设置
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 共享的好处)