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

如何在Linux Rundeck中通过Python访问Windows安全共享路径?

问题:Linux Rundeck环境下访问Windows共享路径权限拒绝

问题描述

  • 目标Windows共享路径://vs-kstp-eligha/testing-folder/build
  • 使用的Python代码:os.listdir(path)
  • 现象:在Windows服务器上运行脚本可正常访问共享并获取数据;但在Linux服务器的Rundeck中执行时,出现权限拒绝错误
  • 已尝试的路径格式:
    • //vs-kstp-eligha/testing-folder/build
    • ////vs-kstp-eligha//testing-folder//build
    • \\vs-kstp-eligha\testing-folder\build
    • \\\\vs-kstp-eligha\\testing-folder\\build
  • 补充信息:Rundeck已配置可正常运行其他Windows相关脚本,仅该共享路径访问时报错

解决方案

方法1:挂载Windows共享目录到Linux本地(推荐)

通过将Windows SMB共享挂载到Linux本地路径,让Python脚本直接访问本地路径,规避跨平台权限问题:

  1. 安装SMB挂载工具cifs-utils:
    # Debian/Ubuntu系统
    sudo apt-get install cifs-utils
    # RHEL/CentOS系统
    sudo yum install cifs-utils
    
  2. 创建本地挂载点:
    sudo mkdir /mnt/win-build-share
    
  3. 临时挂载共享(重启后失效),替换USERNAME、PASSWORD、DOMAIN_NAME为有权访问共享的Windows账号信息:
    sudo mount -t cifs //vs-kstp-eligha/testing-folder/build /mnt/win-build-share -o username=USERNAME,password=PASSWORD,domain=DOMAIN_NAME
    
    无域环境可去掉domain=DOMAIN_NAME参数
  4. 配置永久挂载(可选):
    编辑/etc/fstab文件,添加以下内容:
    //vs-kstp-eligha/testing-folder/build /mnt/win-build-share cifs username=USERNAME,password=PASSWORD,domain=DOMAIN_NAME 0 0
    
    执行mount -a使配置生效
  5. 修改Python脚本路径为本地挂载点:
    os.listdir("/mnt/win-build-share")
    

方法2:Python脚本内直接通过SMB协议认证访问

使用第三方库直接连接SMB共享并完成认证,无需挂载:

  1. 安装pysmb库:
    pip install pysmb
    
  2. 修改Python脚本:
    from smb.SMBConnection import SMBConnection
    
    # 替换为实际账号信息
    win_username = "你的Windows账号"
    win_password = "你的Windows密码"
    server_name = "vs-kstp-eligha"
    share_name = "testing-folder"  # 共享名,不是完整路径
    sub_path = "build"  # 共享目录下的子路径
    
    # 建立SMB连接
    conn = SMBConnection(win_username, win_password, "rundeck-client", server_name, use_ntlm_v2=True)
    conn.connect(server_name, 139)  # 端口可选139或445,需确保防火墙开放
    
    # 获取目录文件列表
    file_list = conn.listPath(share_name, sub_path)
    for item in file_list:
        print(item.filename)
    
    # 关闭连接
    conn.close()
    

方法3:配置Rundeck执行用户的SMB凭证文件

避免在脚本或挂载命令中明文写密码,给Rundeck执行用户配置专属凭证文件:

  1. 切换到Rundeck执行用户(如rundeck),创建~/.smbcredentials文件:
    username=USERNAME
    password=PASSWORD
    domain=DOMAIN_NAME
    
  2. 设置文件权限为600,防止其他用户读取:
    chmod 600 ~/.smbcredentials
    
  3. 挂载时引用该凭证文件:
    sudo mount -t cifs //vs-kstp-eligha/testing-folder/build /mnt/win-build-share -o credentials=/home/rundeck/.smbcredentials
    
    或在/etc/fstab中配置:
    //vs-kstp-eligha/testing-folder/build /mnt/win-build-share cifs credentials=/home/rundeck/.smbcredentials 0 0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:44