ADO发布管道AzurePowerShell任务server_2上Connect-AzAccount失败排查
问题根因分析与解决方法:Connect-AzAccount在Windows Server 2012 R2触发EndOfStreamException
根因
Windows Server 2012 R2默认仅启用TLS 1.0和TLS 1.1,而Azure服务当前要求客户端使用TLS 1.2及以上版本进行通信。当Connect-AzAccount尝试与Azure身份验证服务建立连接时,旧版TLS无法完成握手流程,导致网络流提前终止,最终抛出System.IO.EndOfStreamException。尽管两台服务器的PowerShell、Az模块版本一致,但操作系统的TLS基础配置差异是核心问题。
解决方法
临时修复(单次会话生效)
在执行Connect-AzAccount前,先强制PowerShell会话启用TLS 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
可将这段代码添加到AzurePowerShell任务的初始化脚本开头,或在本地PowerShell控制台中先行执行。
永久修复(系统级生效)
通过修改注册表强制系统默认使用TLS 1.2,无需每次会话手动配置:
- 打开注册表编辑器(运行
regedit.exe) - 定位到路径:
HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 - 创建或修改DWORD类型值
SchUseStrongCrypto,设置数值数据为1 - 若服务器运行32位程序,额外定位到路径:
HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319 - 同样创建或修改DWORD类型值
SchUseStrongCrypto,设置数值数据为1 - 重启服务器使配置生效
验证修复效果
执行以下PowerShell命令确认TLS配置是否生效:
[Net.ServicePointManager]::SecurityProtocol
输出结果需包含Tls12,表示配置成功。
内容的提问来源于stack exchange,提问作者Herbert
相关产品推荐
相关产品推荐

