使用Choco从J-Frog仓库安装Windows NuGet包的Vault凭证死循环问题
解决方案
1. 用用户凭证兑换J-Frog短期访问Token
利用Windows原生PowerShell调用J-Frog API,用用户账号密码直接生成短期token(有效期设为1小时足够完成初始安装),无需提前安装任何工具:
$username = Read-Host "请输入你的账号" $password = Read-Host "请输入你的密码" -AsSecureString $plainPassword = [System.Net.NetworkCredential]::new("", $password).Password $authBase64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$username:$plainPassword")) $tokenResponse = Invoke-RestMethod -Uri "https://<你的J-Frog域名>/artifactory/api/security/token" ` -Method Post ` -Headers @{Authorization = "Basic $authBase64"} ` -Body @{grant_type = "password"; username = $username; password = $plainPassword; expires_in = "3600"} $accessToken = $tokenResponse.access_token
这个短期token仅用于拉取初始工具,有效期短且无需用户手动输入,规避了token存储和输入的问题。
2. 下载并安装初始工具(NuGet/Choco)
用短期token通过PowerShell原生命令从J-Frog仓库拉取离线安装包,完成本地安装:
# 下载NuGet.exe Invoke-WebRequest -Uri "https://<你的J-Frog域名>/artifactory/<NuGet仓库路径>/nuget.exe" ` -Headers @{Authorization = "Bearer $accessToken"} ` -OutFile "$env:TEMP\nuget.exe" # 下载Choco离线包 Invoke-WebRequest -Uri "https://<你的J-Frog域名>/artifactory/<Choco仓库路径>/chocolatey.nupkg" ` -Headers @{Authorization = "Bearer $accessToken"} ` -OutFile "$env:TEMP\chocolatey.nupkg" # 配置NuGet源并安装Choco & "$env:TEMP\nuget.exe" sources Add -Name "J-Frog-NuGet" -Source "https://<你的J-Frog域名>/artifactory/api/nuget/<NuGet仓库名>" -Username $username -Password $accessToken & "$env:TEMP\nuget.exe" install chocolatey -Source "$env:TEMP" -OutputDirectory "$env:ProgramData\chocolatey" $env:Path += ";$env:ProgramData\chocolatey\bin" # 配置Choco源 choco source add -n="J-Frog-Choco" -s="https://<你的J-Frog域名>/artifactory/api/chocolatey/<Choco仓库名>" -u="$username" -p="$accessToken" --priority=1
3. 安装Vault并获取长期专用Token
通过已配置好的Choco安装Vault,再用用户凭证向Vault认证,获取绑定软件安装权限的长期专用token:
# 安装Vault choco install hashicorp-vault -y # 登录Vault并生成专用token vault login -method=userpass username=$username password=$plainPassword $vaultToken = vault token create -role=software-install-role -format=json | ConvertFrom-Json | Select-Object -ExpandProperty auth | Select-Object -ExpandProperty client_token # 更新Choco/NuGet源为Vault token(可选,用于后续批量安装) choco source remove -n="J-Frog-Choco" choco source add -n="J-Frog-Choco" -s="https://<你的J-Frog域名>/artifactory/api/chocolatey/<Choco仓库名>" -u="vault-token" -p="$vaultToken" --priority=1
4. 完成批量软件安装及清理
用配置好的Choco完成批量软件安装,最后清理临时资源和敏感数据:
# 批量安装软件 choco install <软件包1> <软件包2> ... -y # 清理临时文件和敏感变量 Remove-Item "$env:TEMP\nuget.exe" -Force Remove-Item "$env:TEMP\chocolatey.nupkg" -Force $authBase64 = $null $accessToken = $null $plainPassword = $null $vaultToken = $null
内容的提问来源于stack exchange,提问作者Stripy42
相关产品推荐
相关产品推荐

