我正在使用免费的Azure集群来使用Azure Data Explorer查询我的数据。我正在运行以下代码将数据上传到Azure集群。当在本地运行时,我可以使用设备登录方法进行身份验证。在这个方法中,它为我提供了一个代码时运行这个脚本,我需要把代码转到URL https://www.microsoft.com/devicelogin并登录到我的帐户,它工作。
import json
from azure.kusto.data.data_format import DataFormat
from azure.kusto.ingest import (
IngestionProperties,
QueuedIngestClient
)
from azure.kusto.data import KustoConnectionStringBuilder
cluster = ""
database = ""
table = ""
kcsb = KustoConnectionStringBuilder.with_aad_device_authentication(cluster)
client = QueuedIngestClient(kcsb)
ingestion_props = IngestionProperties(
database=database,
table=table,
data_format=DataFormat.JSON,
ingestion_mapping_reference= ""
)
def upload_to_azure_cluster(json_data):
with open("managedDevices.tmp", "w") as file:
file.write(json.dumps(json_data) + "\n")
client.ingest_from_file("managedDevices.tmp", ingestion_properties=ingestion_props)
upload_to_azure_cluster({'title' : 'abcd'})
现在我想在我的ubuntu服务器上以后台模式运行这个脚本。当使用以下命令运行此脚本时,它不会提示代码进行登录。它会卡在那里。
nohup python3 azure_upload.py &
2条答案
按热度按时间mrzz3bfm1#
您应该在Azure AD中创建服务主体,并将其与后台工作进程一起使用。This page显示了多个不同身份验证方式的示例。
例如,基于证书的身份验证:
zfycwa2u2#
现在我想在Ubuntu服务器上以后台模式运行这个脚本。当使用以下命令运行此脚本时,它不会提示代码进行登录。它会卡在那里。
运行脚本Ubuntu服务器(
non-interactive server
)时,可以使用Azure AD应用程序和客户端密码对连接进行身份验证。您与Azure Data Explorer的连接似乎已使用**
Azure AD device authentication
进行身份验证。另一方面,您正在使用的身份验证流是为交互式使用而构建的,使您能够手动输入设备登录机制给出的代码。您可以按照MS-Document创建一个应用程序进行身份验证。
创建一个具有必要API权限
user_impersation
**的应用程序以访问Azure数据资源管理器,并确保授予管理员权限,如下所示。添加您的应用程序以访问数据库,如下所示:
添加后,您可以在Ubuntu服务器中使用以下代码**
.with_aad_application_key_authentication
**。验证码:
输出: