You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动化连接Azure AAD认证的本地Windows VM并实现文件传输与命令执行

解决方案

1. WinRM 结合 AAD 认证(优先推荐)

既然组织禁止获取明文凭据,WinRM的AAD身份验证是合规的最优方向,无需存储账号密码,直接利用当前用户的AAD身份或服务主体完成认证。可以用pypsrp库(对WinRM认证的支持比pywinrm更全面)实现:

命令执行示例

from pypsrp.client import Client
from pypsrp.powershell import PowerShell, RunspacePool

# 初始化WinRM客户端,使用AAD用户身份认证
client = Client(
    "your-vm-hostname",
    auth="azuread",
    username="your-aad-username@your-domain.com",
    certificate_validation=False  # 测试环境可临时关闭,生产环境建议配置合法证书
)

# 执行PowerShell命令并获取输出
with RunspacePool(client) as pool:
    ps = PowerShell(pool)
    ps.add_command("Get-ChildItem -Path C:\\temp")
    output = ps.invoke()
    
    for item in output:
        print(f"文件/文件夹:{item.properties['Name'].value}")

文件传输示例

pypsrp支持通过WinRM直接传输文件,无需额外部署SFTP服务:

from pypsrp.client import Client

client = Client(
    "your-vm-hostname",
    auth="azuread",
    username="your-aad-username@your-domain.com"
)

# 上传本地文件到远程VM
client.copy("local-file-path\\example.txt", "C:\\remote-folder\\example.txt")

# 下载远程文件到本地
client.copy("C:\\remote-folder\\result.log", "local-save-path\\result.log", remote_to_local=True)

2. Pywinauto 自动化 RDP(无WinRM权限时备选)

如果目标VM未开启WinRM服务,只能模拟手动RDP操作,用pywinauto操控mstsc.exe完成登录和后续操作(注意:该方式依赖UI元素定位,稳定性受VM分辨率、登录界面改版影响):

示例代码

from pywinauto import Application
import time

# 启动远程桌面客户端
app = Application().start("mstsc.exe")

# 填写VM地址并发起连接
rdp_dlg = app.window(title="远程桌面连接")
rdp_dlg.Edit.set_text("your-vm-hostname")
rdp_dlg.connect()

# 等待AAD登录窗口加载(需根据实际登录界面调整等待时长和控件定位)
time.sleep(5)
login_app = Application().connect(title_re="Azure AD 登录")
# 模拟点击"使用工作或学校账户登录"按钮(控件名称需根据实际界面确认)
login_app.window().Button.click()

# 登录完成后,操控远程桌面内的程序
rdp_window = Application(backend="uia").connect(title_re="your-vm-hostname - 远程桌面")
# 示例:打开CMD执行命令
rdp_window.type_keys("{WIN}r")
rdp_window.window(title="运行").Edit.set_text("cmd")
rdp_window.window(title="运行").Button.click()
rdp_window.window(title="命令提示符").type_keys("dir C:\\temp{ENTER}")

3. 其他可行方向

  • PowerShell远程会话+Python调用:如果本地已配置好AAD认证的PowerShell远程会话,可通过Python的subprocess模块直接调用Invoke-Command和Copy-Item命令,无需额外安装Python库。
  • 组织内部管理工具集成:对接组织内部的AD集成远程管理API,或利用Ansible等自动化工具的WinRM AAD插件完成操作。

内容的提问来源于stack exchange,提问作者Anshuman Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:09:52