DOS命令行执行AWS SAM Build访问Sonatype Nexus遇401未授权错误
解决SAM Build时Sonatype Nexus NuGet源401未授权问题
问题背景
我们公司使用Sonatype Nexus Repository Server获取NuGet包,当前SAM CLI版本为1.124.0。已通过DOS命令添加Nexus作为NuGet源:
nuget sources add -Name "Nexus" -Source "https://yadablahyadaSonatypeNexusRepositoryServerblahyada:8443/repository/nuget-dll/" -username "[ Blah Blah Assigned Nexus username Yada Yada]" -password "[Blah BlahNexus password Yada Yada]"
但执行sam build时出现401未授权错误,错误详情:
C:\YadaBlahBlah\BlahYadaBlahtestprojects\src\Lambda>sam build Building codeuri: C:\YadaBlahBlah\BlahYadaBlahtestprojects\src\Lambda runtime: dotnet6 architecture: x86_64 functions: LclStkExperimentLambda Workflow DotnetCliPackageBuilder does not support value "False" for building in source. Using default value "True". Running DotnetCliPackageBuilder:GlobalToolInstall Build Failed Error: DotnetCliPackageBuilder:GlobalToolInstall - Error configuring the Amazon.Lambda.Tools .NET Core Global Tool: Dotnet CLI Failed: Unhandled exception: Failed to fetch results from V2 feed at 'https://yadablahyadaSonatypeNexusRepositoryServerblahyada:8443/repository/nuget-dll/FindPackagesById()?id='amazon.lambda.tools'&semVerLevel=2.0.0' with following message : Response status code does not indicate success: 401 (Unauthorized).
解决步骤
1. 修正NuGet源的凭据格式
你添加源时的用户名和密码包含多余的方括号与空格,直接导致认证失败。重新执行添加命令,去掉不必要的符号:
nuget sources add -Name "Nexus" -Source "https://yadablahyadaSonatypeNexusRepositoryServerblahyada:8443/repository/nuget-dll/" -username "你的Nexus用户名" -password "你的Nexus密码"
执行完成后用nuget sources list确认源配置,确保用户名正确、密码显示为***。
2. 验证Nexus仓库权限与包可用性
- 登录Sonatype Nexus后台,检查
nuget-dll仓库的权限设置:确认你的账号拥有该仓库的读取权限。 - 如果是代理仓库,检查上游NuGet源是否配置正确,确保
Amazon.Lambda.Tools能被Nexus正常拉取并缓存。 - 部分场景下Nexus支持API密钥认证,可尝试用API密钥代替密码重新配置源。
3. 确保Dotnet CLI读取正确的NuGet配置
SAM Build调用dotnet CLI时可能未加载用户级配置,需手动确认全局NuGet配置文件:
- 找到Windows系统下的全局配置文件:
%APPDATA%\NuGet\NuGet.Config - 打开文件,确认包含Nexus源的凭据配置,示例如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="Nexus" value="https://yadablahyadaSonatypeNexusRepositoryServerblahyada:8443/repository/nuget-dll/" /> </packageSources> <packageSourceCredentials> <Nexus> <add key="Username" value="你的Nexus用户名" /> <add key="ClearTextPassword" value="你的Nexus密码" /> </Nexus> </packageSourceCredentials> </configuration>
保存后执行dotnet restore测试包拉取,再重新运行sam build。
4. 手动安装Amazon.Lambda.Tools全局工具
绕过SAM自动安装流程,手动安装工具:
dotnet tool install -g Amazon.Lambda.Tools --source "Nexus"
安装成功后,SAM会直接使用已安装的工具,无需再次拉取。
5. 检查用户上下文一致性
确保添加NuGet源的用户与运行SAM CLI的用户一致,避免管理员/普通用户权限隔离导致配置无法读取。如果之前在管理员命令行添加源,切换到对应用户重新添加。
内容的提问来源于stack exchange,提问作者crazyTech
相关产品推荐
相关产品推荐

