You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已启用SFTP的Azure存储账户本地用户添加问题(PowerShell/Python)

问题解决:Azure存储账户SFTP本地用户创建报错及Python自动化实现

一、PowerShell命令报错修复

你遇到的BadRequest错误核心原因是New-AzStorageLocalUserPermissionScope的-ResourceName参数取值错误——该参数需要指定存储账户内的具体资源(如Blob容器名、文件共享名),而非资源组名称。以下是修正后的操作步骤:

1. 修正后的PowerShell命令

$resourceGroupName = "myResourceGroup"
$storageAccountName = "mystorageaccount"
# 替换为你要授权的Blob容器/文件共享名称
$targetResourceName = "mycontainer"

# 创建权限范围(示例为Blob容器读写权限)
$permissionScope = New-AzStorageLocalUserPermissionScope -Permission rw -Service blob -ResourceName $targetResourceName

# 创建新SFTP用户(首次创建用New更贴合场景,Set用于更新已有用户)
New-AzStorageLocalUser -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName "test" -HomeDirectory "/" -PermissionScope $permissionScope -HasSshPassword $true

2. 获取自动生成的密码

执行上述命令后,系统会自动生成SFTP密码,可通过以下命令获取:

$password = Get-AzStorageLocalUserSshPassword -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName "test"
Write-Output "用户test的SFTP密码:$($password.SshPassword)"

额外说明

  • 若需设置自定义密码,可在New-AzStorageLocalUser命令中添加-SshPassword (ConvertTo-SecureString "你的自定义密码" -AsPlainText -Force)参数,密码需满足:至少12字符,包含大小写字母、数字、特殊字符。
  • 权限范围的Permission支持r(只读)、w(只写)、rw(读写),Service支持blob或file。

二、Python直接实现SFTP用户自动化创建

无需调用PowerShell,可直接使用Azure Python SDK完成操作,步骤如下:

1. 安装依赖包

pip install azure-mgmt-storage azure-identity

2. Python代码示例

from azure.identity import DefaultAzureCredential
from azure.mgmt.storage import StorageManagementClient
from azure.mgmt.storage.models import LocalUser, PermissionScope

# 配置参数
SUBSCRIPTION_ID = "你的Azure订阅ID"
RESOURCE_GROUP_NAME = "myResourceGroup"
STORAGE_ACCOUNT_NAME = "mystorageaccount"
USERNAME = "test"
TARGET_CONTAINER = "mycontainer"  # 授权的Blob容器名称
HOME_DIRECTORY = "/"

# 初始化Azure客户端
credential = DefaultAzureCredential()
storage_client = StorageManagementClient(credential, SUBSCRIPTION_ID)

# 构建权限范围
permission_scope = PermissionScope(
    permission="rw",
    service="blob",
    resource_name=TARGET_CONTAINER
)

# 构建本地用户对象
local_user = LocalUser(
    home_directory=HOME_DIRECTORY,
    permission_scopes=[permission_scope],
    has_ssh_password=True
)

# 创建/更新用户
storage_client.local_users.create_or_update(
    resource_group_name=RESOURCE_GROUP_NAME,
    account_name=STORAGE_ACCOUNT_NAME,
    username=USERNAME,
    local_user=local_user
)

# 获取自动生成的SFTP密码
password_result = storage_client.local_users.list_ssh_public_keys_and_password(
    resource_group_name=RESOURCE_GROUP_NAME,
    account_name=STORAGE_ACCOUNT_NAME,
    username=USERNAME
)
print(f"用户{USERNAME}的SFTP密码:{password_result.ssh_password}")

说明

  • 使用DefaultAzureCredential需确保本地已配置Azure认证(如Azure CLI登录、环境变量配置等)。
  • 若需设置自定义密码,可在LocalUser对象中添加ssh_password="你的自定义密码"参数。

内容的提问来源于stack exchange,提问作者Ruwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:37:30