在 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 远程会话中的 UNC 路径

在屏幕会话中访问 SSH 客户端 IP 地址

一个 PowerShell SSH 可以不将密钥存储在磁盘上吗?

使用 PowerShell 访问 WebView2 中的 cookie

powershell 在PowerShell中启动远程会话