在 powershell ssh 会话中访问 Windows 网络驱动器
Posted
技术标签:
【中文标题】在 powershell ssh 会话中访问 Windows 网络驱动器【英文标题】:Access Windows network drives inside powershell ssh session 【发布时间】:2021-01-19 23:35:10 【问题描述】:我正在尝试从 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:'
脚本在本地工作,当我将路径修改为本地路径并将文件移动到本地路径时也可以工作
预期结果
映射驱动器 R:
或远程路径 \\remoteFile
应该可以在 ssh 会话中访问
解决方法
在我的命令之前映射驱动器,即
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 会话中的远程文件吗?脚本执行应完全自动化,因此不考虑任何需要交互式命令/手动输入的解决方案。
【问题讨论】:
【参考方案1】:它之所以能够工作,并允许您在本地映射驱动器,是因为您具有直接访问权限和这样做的权限。在远程访问的机器上,您无法访问共享的原因是因为良好的“ol kerberos double hop issue”。最简单的解决方案是在远程机器上本地获取该文件,而不是共享。然后运行本地文件。
【讨论】:
谢谢!这意味着我要么坚持当前的方法(在执行命令之前运行 net use),还是先使用某种 sftp 来获取文件?没有标准的 windows 方法来解决这个问题?以上是关于在 powershell ssh 会话中访问 Windows 网络驱动器的主要内容,如果未能解决你的问题,请参考以下文章
python 使用PowerShell Remoting的Python(Windows等效于Unix ssh会话)
一个 PowerShell SSH 可以不将密钥存储在磁盘上吗?