访问Powershell SSH会话中的Windows网络驱动器

问题描述

我正在尝试通过linux盒自动在Windows上远程执行一些脚本。该脚本将读取共享驱动器上的一些文件,然后输出一些输出

问题

该脚本位于C:\scripts\script.py中,它将读取R:(从\\remoteFile映射)

使用ssh user@windows01 "python C:\scripts\script.py"执行脚本会导致FileNotFoundError: [Errno 2] No such file or directory: 'R:'

该脚本在本地有效,当我将路径修改为本地路径并将文件移动到本地路径时,该脚本也有效

预期结果

在ssh会话中应该可以访问映射的驱动器R:或远程路径\\remoteFile

解决方法

在我的命令之前映射驱动器,即

ssh user@windows01 "net use R: \\\\remoteFile ${password} /user:user; python C:\scripts\script.py"

解决方案有效,但不是最佳解决方案:我有许多脚本以不同的时间表运行,因此这意味着将这一行添加到所有作业中。

我尝试过的事情

  • 修改脚本以直接读取\\remoteFile,但是ssh会话中也不存在该路径
  • 我已阅读github issue并设置了EnabledLInkedConnections,但在ssh会话中仍找不到该路径
  • 我已经读过this issue,但是它不能解决带有公钥的ssh会话
  • credssp可能是一个解决方案,但是它需要在服务器/客户端上进行更多设置,并且我不确定是否值得尝试(我听说credssp也存在安全问题)

问题

是否有任何干净的方法可以读取ssh会话中的远程文件?脚本执行应该是完全自动化的,因此不会考虑需要交互式命令/手动输入的任何解决方案。

解决方法

之所以能够工作,并允许您在本地映射驱动器,是因为您具有直接访问权限,并有权这样做。在远程访问的计算机上无法访问共享的原因是因为'ol kerberos double hop issue很好。最简单的解决方案是在远程计算机上本地获取该文件,而不是共享。然后运行本地文件。