我正在使用azure cli
*nix 机器中的工具来管理 Azure 帐户中的个人虚拟机。我想知道是否有办法保存我的登录凭据,这样我就不必重新执行命令,azure login
也不必输入我的密码/凭据。
我使用 下载了我的帐户设置azure account download
并使用 导入到我的机器上azure account import
,但是当我重新启动会话时,我仍然需要执行手动登录步骤。
因此,有没有办法设置 azure cli 来保存我的帐户详细信息,这样我就不必手动登录了?
答案1
当你调用时,azure login
你实际上得到的是一个只有有限生命周期的令牌,所以即使你能跨会话持久化,它也会于 12 小时后过期。这是有可能的,但是不建议在脚本中指定用户名和密码:
azure login -u $username -p $password
为此,您必须使用 Azure Active Directory 帐户进行身份验证,假设您愿意承担此风险,因为您正在管理您的个人的Azure 订阅可能是最简单的选择。
根据我的经验,有两种方法更适合公司、企业或高风险场景:
Azure 自动化
Azure 自动化是一项 Azure 平台服务,可让您在 Azure 中构建参数化工作流,并可按计划、从 Web UI 或从命令行触发这些工作流。由于工作流运行的环境在时间和多个环境中保持一致,因此重复性任务得以简化。
Azure Active Directory 服务主体
使用 Azure 进行身份验证服务主体允许您使用证书(.pfx
)登录 Azure,假设所述证书没有密码存储,那么您可以按照以下步骤实现无密码登录:
- 生成用于身份验证的公钥/私钥对。
- 创建新的 Azure Active Directory 应用程序
- 为你的 AAD 应用程序创建新的服务主体
- 向你的服务主体授予订阅权限
在脚本中使用服务主体进行身份验证
cert=$(openssl x509 -in "./examplecert.pem" -fingerprint -noout | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' tenantId=$(azure account show -s <subscriptionId> --json | jq -r '.[0].tenantId') appId=$(azure ad app show --search exampleapp --json | jq -r '.[0].appId') azure login --service-principal --tenant "$tenantId" -u "$appId" --certificate-file ./examplecert.pem --thumbprint "$cert"