首页 文章

如何使用powershell连接到新的Windows VM,但是没有使用gcloud命令或项目仪表板?

提问于
浏览
1

我的问题有点复杂,所以我将从 context 的简短解释开始 . 目标是:

  • 在Google Cloud Platform上创建新的Windows实例

  • 避免使用gcloud命令行sdk而是使用(REST)API

  • 通过powershell(而不是rdp)连接到VM


Problem

没有API来创建新的Windows帐户和密码,就像gcloud命令行一样:

gcloud compute reset-windows-password

但是当然需要用户连接到vm .


My ideas

我尝试使用创建新用户的启动脚本 . powershell脚本已经在正在运行的计算机上以预期的方式工作(作为管理员):

$ADSIComp =[adsi]"WinNT://test-remote"
$NewUser = $ADSIComp.Create('User','test')
$NewUser.SetPassword(('S€cur3P@ssword'))
$NewUser.SetInfo()
$Group = [ADSI]"WinNT://test-remote/Administrators,group"
$Group.Add("WinNT://test,user")

Google Cloud 提供了不同类型的启动脚本(see here) . 我尝试使用sysprep-specialize-script-ps1,所以它只运行一次 . (它是否正确?) . 为了测试这是否有效,我在Google Cloud 仪表板上创建了一个新的Windows实例 . 在元数据部分中,我将sysprep-specialize-script-ps1作为metakey插入,并将括号中的脚本行作为值插入 .

Result

我在仪表板上创建了一个新用户,以便在Windows机器上登录 . 但是上面的脚本没有创建用户 . 所以我的方法失败了 .


Open Questions

你能否在我的过程中看到(概念上的或技术上的)错误?

有没有其他方法可以达到指定的目标?

谢谢!

1 回答

  • 1

    您可以查看Python/Java example provided here,它允许您使用Google Cloud Client库为Windows VM生成新密码并实际在本地打印 .

    自动生成Windows密码gcloud compute reset-windows-password命令允许具有Compute Engine项目写入权限的用户安全地检索Windows实例上帐户的密码 . 该命令通过向实例发送用户名和RSA公钥来完成此操作 . 然后,在实例上运行的代理会:在该实例上为该用户名创建一个帐户并生成随机密码 . 如果帐户已存在,请将密码重置为随机值 . 在实例上运行的代理使用提供的公钥加密密码,并将其发送回客户端以由相应的私钥解密 .

    这个过程是这样的:

    • 您可以选择您传递的用户名 .

    • 传入用于加密的RSA密钥对的公钥 . 您在本地保留RSA密钥对的私钥 .

    • 使用步骤1和2中提到的信息覆盖VM上的 windows-keys 元数据 .

    • 加密密码打印到COM4串口 .

    • 然后,您拉出加密密码并在您的计算机上本地解密 .

    对于updating an instance's metadata以及reading an instance's Serial port outputCompute Engine APIs . 我之前使用客户端库指出的示例使用这些API .

    因此,您可以使用客户端库构建脚本/应用程序,也可以直接调用上面提到的API .

    重新发明轮子

    由于我不知道您为什么要避免使用 gcloud 的确切原因,我想指出使用REST API的客户端库的手动方式基本上执行与方便的 gcloud compute reset-windows-password 命令完成的完全相同的步骤 .

    换句话说,你可能会在这里重新发明轮子 . 执行此操作有合法的情况,例如您希望将此逻辑添加到应用程序中,并且不希望调用外部程序来执行此操作 . 如果您只打算将其用作脚本的一部分,我建议重用 gcloud ,除非有强烈的反对使用它 .

相关问题