内容提要
本文介绍如何通过SSH和PowerShell远程控制Windows真机,让AI Agent执行系统查询与操作。重点包括配置OpenSSH Server、使用EncodedCommand避免转义问题、通过CUA Driver MCP实现GUI自动化,并强调安全边界、只读优先、操作后复查等原则,以建立可重跑的验证流程。
延伸解读
SSH与RDP的边界
文章强调SSH控制与远程桌面(RDP)有本质区别:SSH提供的是窄门,可执行命令但看不到交互式桌面。这意味着通过SSH启动的进程不一定显示在用户桌面,也不能依赖截图组件。需要GUI操作时,应使用专门的桌面自动化通道(如CUA Driver MCP),而不是试图用PowerShell模拟。理解这一边界有助于避免误用SSH进行界面操作。
EncodedCommand的实用价值
复杂PowerShell脚本在多层Shell传递中容易因转义问题出错。文章推荐使用EncodedCommand,将脚本转为UTF-16LE Base64发送,避免引号、变量被错误解释。但需注意,Base64并非加密,不能用于传输敏感信息。此外,中文输出需显式设置UTF-8编码,否则易乱码。这些技巧对实际自动化操作很有帮助。
验证结果而非命令成功
文章强调,命令返回成功不代表目标状态已改变。例如,服务启动后应再查询状态,进程拉起后应检查端口。同时,退出码可能被中间层改写,不能作为唯一判断依据。建议结合退出状态、stderr、结构化错误字段以及操作后的状态复查来综合判断。这一原则对任何自动化任务都至关重要。
安全边界与权限管理
配置免密登录后,需严格管理安全边界:仅在可信网络使用,不暴露公网;使用专用账号和独立密钥;首次连接人工核验指纹;私钥等敏感信息不进入提示词或日志。高风险操作(如删除、安装)必须人工确认。文章还建议将执行与复核分离,避免执行者自评通过,这些措施能有效降低自动化风险。
Q&A
如何通过SSH远程控制Windows设备?
在Windows 11上启用OpenSSH Server,配置密钥认证,然后从Agent所在设备使用SSH别名连接,执行PowerShell命令。
为什么使用EncodedCommand而不是直接传命令?
因为命令经过多层Shell传递时,引号、变量等容易被转义破坏,使用EncodedCommand将PowerShell脚本编码为UTF-16LE Base64,可以避免转义问题。
如何解决PowerShell中文输出乱码问题?
在PowerShell中设置[Console]::OutputEncoding = [Text.Encoding]::UTF8,或者尽量让脚本返回JSON格式的数据。
SSH和远程桌面(RDP)有什么区别?
SSH提供命令行访问,无法看到交互式桌面;RDP是图形界面远程控制。SSH更适合Agent执行系统查询和脚本,GUI操作需要专门的桌面自动化工具。
如何通过CUA Driver MCP实现GUI自动化?
DesireCore Windows版内置CUA Driver MCP,通过UIA/MSAA等接口读取窗口和控件,支持截图、点击、输入等操作。Agent先列出窗口,再逐步操作,操作后重新读取状态验证。
远程控制Windows时有哪些安全注意事项?
只在可信网络使用,不暴露SSH端口到公网;使用专用账号和独立密钥;首次连接核验主机指纹;私钥等敏感信息不进入提示词;高风险操作需人工确认;操作后复查状态。
为什么SSH返回的退出码可能与预期不符?
因为中间Shell或进程可能改写退出码,例如cmd.exe或PowerShell可能将退出码转换为1。因此不能仅依赖退出码,应结合stderr、结构化错误和最终状态判断。
如何开始搭建自己的win-test测试机?
建议从只读巡检开始,先实现最小闭环:无交互连接、返回预期信息、读取PowerShell版本、检查服务、输出JSON。然后故意制造小问题测试Agent的失败处理能力,最后再加入修改操作和GUI自动化。