问题描述
我正在尝试通过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很好。最简单的解决方案是在远程计算机上本地获取该文件,而不是共享。然后运行本地文件。