如何在 Azure Devops 发布管道中读取多行 Azure Key Vault 机密

How to read multiline Azure Key Vault secret in Azure Devops Release pipeline

我在 Azure Release Pipeline 中使用多行 Azure Key Vault 值时遇到问题...

我将多行值(RSA 私钥)放入 Azure Key Vault using the CLI:

az keyvault secret set --vault-name "vault" --name "secret" --file "pk.pem"

这有效,我可以在门户中看到多行秘密。

在本地使用 CLI 我也可以这样做:

pk=$(az keyvault secret show \
--name "ssh-private-key" \
--vault-name $vault \
--query "value")

这个 returns 有点糟糕的值(是的,包括双引号):

"-----BEGIN RSA PRIVATE KEY-----\nMIIG4wIBAA .... JtpyW\n-----END RSA PRIVATE KEY-----\n"

我可以设法使用它并将值发送到文件,如下所示:

pk="${pk%\"}" #remove first quote
pk="${pk#\"}" #remove last quote


echo $pk | sed 's|\n|\n|g' | # replace with actual newlines
while IFS= read -r line; do   # loop through lines
  echo "$line" >> pk.pem      # write to file per line
done

这有效,我可以使用 ssh -i pk.pem user@server

登录到我的服务器

但是当 运行 Azure Devops 发布管道中的相同脚本(也在 Linux 代理上使用 Bash)时,完全相同的脚本失败了......我也是无法检查实际值,因为日志掩盖了与秘密相关的所有值...

任何关于如何调试或使用实际阅读多行值而不是仅仅存储它们的指南将不胜感激!

这里有一个故障排除建议:

错误“Host key verification failed.”不仅仅出现在密钥不正确的时候。大多数时候,它不会引用您的密钥。

所以我建议您先尝试使用简单值的连接,看看它是否适用于 Azure DevOps。

此外,也许 SSH service connection 可以帮助您完成您正在做的事情。转到项目设置 -> 服务连接 -> 创建服务连接 -> SSH 创建一个。