很早以前其实分享过一篇《IT男自救指南之Azure custom script extension应用》,讲的内容其实是当Windows的虚机防火墙因为意外配置,导致block了RDP的端口,这种情况下如何进行自救的故事,没看过的可以去看看
https://blog.51cto.com/mxyit/2452428
其实除了之前讲的可以用custom script extension运行脚本来自救之外,我们还可以用serial console来解决这个问题,而且效果可能还会更好点
serial console之前已经介绍过了,它连接到 VM 或虚拟机规模集实例的 COM1 串行端口,为用户提供访问权限,而不管它的网络或操作系统状态如何,如果出现了防火墙block了RDP或者其他意外情况,我们都可以通过serial console登录到服务器中,windows的serial console同样有一些限制,这点和Linux是一样的
1. 串行控制台当前与托管的启动诊断存储帐户不兼容。 若要使用串行控制台,请确保使用的是自定义的存储帐户。
2. 不支持经典ASM VM
3. 使用串行控制台的 Azure 帐户必须对 VM 和启动诊断存储帐户拥有虚拟机参与者角色
如果想在windows上使用serial console的话,我们需要开启SAC
Azure 上较新的 Windows Server 映像默认情况下已启用特殊管理控制台 (SAC)。 SAC 在服务器版本的 Windows 上受支持,但在客户端版本(例如 Windows 10、Windows 8 或 Windows 7)上不可用。
对于较旧的 Windows Server 映像(在 2018 年 2 月之前创建),可以通过 Azure 门户的运行命令功能自动启用串行控制台。 在 Azure 门户中,选择“运行命令”,然后从列表中选择名为“EnableEMS”的命令 。
但是其实直接在虚拟机上运行命令效果也是一样的
bcdedit /ems '{current}' on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200
开启SAC之后,我们点击虚拟机的serial console的时候应该就可以看到这个界面
在这里我们其实可以是直接运行cmd或者是PowerShell的,输入cmd命令之后看起来好像没什么变化
但是实际上可以通过ch -si 1切换到这个channel
在cmd中我们直接enter,之后就可以输入账户密码进行验证了
之后就能看到熟悉的cmd界面了!
之后就可以解决一些实际问题了,比如查询RDP是否启用,term service是否正在运行等等
微软已经把一些常见的场景都已经总结好了,也可以去看看