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

如何自动化连接采用Azure AAD认证的本地Windows虚拟机并实现文件传输与命令执行?

如何自动化连接采用Azure AAD认证的本地Windows虚拟机并实现文件传输与命令执行?

兄弟,太懂你手动RDP反复输密码的痛苦了!之前用Paramiko搞定Linux那套确实顺手,但Windows加上Azure AD认证后,确实不能直接照搬SSH的路子,我给你捋几个靠谱的自动化方案,都是实际能用的:

方案一:用PowerShell原生实现(最推荐)

Windows和PowerShell天生适配,而且原生支持Azure AD认证,不管你是本地内网加入AAD的VM,还是Azure云上的AAD登录VM,这个方案都能搞定,步骤也清晰:

1. 准备工作

  • 确保目标Windows VM已经配置好AAD登录(你手动能RDP进去就没问题)
  • 本地机器安装Azure PowerShell模块,没装的话跑这个命令:
Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • 目标VM开启WinRM服务(默认应该开了,要是没开,手动RDP进去跑Enable-PSRemoting -Force)

2. 自动化登录Azure AD(避免手动输密码)

如果要完全自动化,别用手动的Connect-AzAccount,改用服务主体或者证书登录,比如用服务主体的方式:

# 替换成你的租户ID、服务主体ID和密钥
$tenantId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
$clientId = "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy"
$clientSecret = ConvertTo-SecureString "你的服务主体密钥" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret)

# 登录Azure AD
Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $tenantId

3. 建立远程PowerShell会话

先把目标VM加入本地WinRM信任列表,不然会报安全错误:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "目标VM的IP或主机名" -Concatenate -Force

然后用AAD账号建立远程会话,自动化的话可以把密码存在环境变量里,避免硬编码:

$aadUsername = "你的AAD用户名@你的租户域名.com"
# 从环境变量读取密码,安全又方便
$password = ConvertTo-SecureString $env:AAD_VM_PASSWORD -AsPlainText -Force
$aadCredential = New-Object System.Management.Automation.PSCredential($aadUsername, $password)

# 建立远程会话
$remoteSession = New-PSSession -ComputerName "目标VM的IP" -Credential $aadCredential

4. 文件传输

用Copy-Item结合远程会话就能搞定,和本地复制一样简单:

# 本地文件传到VM
Copy-Item -Path "C:\本地路径\test.zip" -Destination "D:\VM上的目标路径\" -ToSession $remoteSession

# 从VM下载文件到本地
Copy-Item -Path "D:\VM上的路径\output.log" -Destination "C:\本地下载路径\" -FromSession $remoteSession

5. 远程执行命令

用Invoke-Command直接在远程会话里跑命令,想执行啥Windows命令、脚本都可以:

# 比如查看VM里带random的文件
$result = Invoke-Command -Session $remoteSession -ScriptBlock {
    Get-ChildItem "D:\目标目录\*random*"
    # 也可以运行批处理、exe,比如安装软件
    Start-Process "D:\setup.exe" -Wait -NoNewWindow
}

# 打印执行结果
Write-Host "远程命令执行结果:"
$result

方案二:开启Windows OpenSSH服务,用类似Paramiko的方式

如果你习惯了用Python的SSH库操作,也可以给Windows VM开启OpenSSH服务,然后配置AAD认证,这样就能用Paramiko或者ssh2-python这类库操作了,不过步骤稍多:

1. 在目标VM上开启OpenSSH Server

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

2. 配置AAD认证SSH

需要在VM上安装Azure AD SSH登录扩展,或者用PowerShell配置AAD作为SSH的身份源,配置后注意AAD用户登录SSH时的用户名格式是AzureAD\你的AAD用户名或者你的UPN。

3. 用Python连接(类似Paramiko)

配置好之后,就可以用Paramiko尝试连接,示例代码大概是这样:

import paramiko

host = "目标VM的IP"
username = "你的AAD用户名@租户域名.com"
password = "你的AAD密码"

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    client.connect(host, username=username, password=password)
    # 传输文件
    sftp = client.open_sftp()
    sftp.put("本地文件路径", "VM上的路径")
    # 执行命令
    stdin, stdout, stderr = client.exec_command("dir *random*")
    print(stdout.read().decode('gbk'))  # Windows默认编码是GBK,注意解码
finally:
    client.close()

不过这个方案要注意,Windows的OpenSSH对AAD认证的支持不如PowerShell原生,可能会遇到权限或者配置问题,所以还是优先推荐方案一。


备注:内容来源于stack exchange,提问作者Anshuman Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:39:44