Ubuntu服务器后台运行免费Azure Data Explorer上传脚本的认证问题
解决Ubuntu后台运行Azure Data Explorer上传脚本的设备登录认证问题
设备登录认证依赖交互式终端输出认证代码并等待用户完成登录,但nohup后台运行时脚本无法访问交互式终端,导致进程停滞。以下是几种可行的解决方式:
方法1:改用服务主体认证(推荐,适合长期后台运行)
服务主体认证无需交互式操作,是后台脚本的理想认证方式:
- 创建Azure AD服务主体:
用Azure CLI执行命令:
执行后会返回az ad sp create-for-rbac --name "kusto-ingest-service-principal"tenantId、clientId、clientSecret,保存好这些信息。 - 给服务主体授予ADX权限:
在Azure Data Explorer集群的权限设置中,给该服务主体添加Ingestor角色权限,确保它能向集群写入数据。 - 修改脚本的认证代码:
替换原脚本中设备登录的代码段:
修改后,脚本后台运行时无需手动干预即可完成认证。# 原设备登录代码 # kcsb = KustoConnectionStringBuilder.with_aad_device_authentication(cluster) # 替换为服务主体认证 tenant_id = "你的租户ID" client_id = "你的服务主体ID" client_secret = "你的服务主体密钥" kcsb = KustoConnectionStringBuilder.with_aad_application_key_authentication( cluster, client_id, client_secret, tenant_id )
方法2:先前台完成认证,利用缓存凭据后台运行
Azure SDK会将认证凭据缓存到~/.azure目录下,可先在前台完成一次认证,之后后台运行时自动复用缓存:
- 前台运行脚本:
按照提示完成设备登录认证,确认数据上传成功。python3 azure_upload.py - 后台运行脚本:
脚本会自动读取缓存的认证凭据,无需再次交互。nohup python3 azure_upload.py &注意:缓存凭据有有效期,到期后需重新前台执行认证更新缓存。
方法3:捕获认证输出,手动完成登录(临时场景适用)
让脚本把设备登录的提示信息输出到日志文件,手动查看并完成认证:
- 运行脚本时指定日志输出:
nohup python3 azure_upload.py > upload.log 2>&1 & - 查看日志文件获取认证代码:
日志中会包含设备登录的代码和验证链接,手动访问链接输入代码完成认证,脚本即可继续执行。cat upload.log
内容的提问来源于stack exchange,提问作者Parth
相关产品推荐
相关产品推荐

