如何在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脚本直接访问本地路径,规避跨平台权限问题:
- 安装SMB挂载工具
cifs-utils:# Debian/Ubuntu系统 sudo apt-get install cifs-utils # RHEL/CentOS系统 sudo yum install cifs-utils - 创建本地挂载点:
sudo mkdir /mnt/win-build-share - 临时挂载共享(重启后失效),替换
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_NAMEdomain=DOMAIN_NAME参数 - 配置永久挂载(可选):
编辑/etc/fstab文件,添加以下内容:
执行//vs-kstp-eligha/testing-folder/build /mnt/win-build-share cifs username=USERNAME,password=PASSWORD,domain=DOMAIN_NAME 0 0mount -a使配置生效 - 修改Python脚本路径为本地挂载点:
os.listdir("/mnt/win-build-share")
方法2:Python脚本内直接通过SMB协议认证访问
使用第三方库直接连接SMB共享并完成认证,无需挂载:
- 安装
pysmb库:pip install pysmb - 修改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执行用户配置专属凭证文件:
- 切换到Rundeck执行用户(如
rundeck),创建~/.smbcredentials文件:username=USERNAME password=PASSWORD domain=DOMAIN_NAME - 设置文件权限为600,防止其他用户读取:
chmod 600 ~/.smbcredentials - 挂载时引用该凭证文件:
或在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
相关产品推荐
相关产品推荐

