windows - 通过 RDP 使用命令行从远程 Windows 机器复制文件
问题描述
我们的团队有大约 80 台 Windows 开发机器,每个开发人员的活动都以文本文件的形式记录在这些机器的本地存储中。为了分析记录的活动,我想从这些机器上收集所有日志文件。此外,日志文件会不断更新,因此最好从我的机器上使用命令行收集文件。
我搜索并找到了一些解决方案,但所有这些都不适合我们的情况:
- 我们不能使用 PsExec,因为 tcp/135 和 tcp/445 都已关闭(WannaCry 的对策)。
- 管理共享被禁用。
- telnet 服务未启动,出于安全原因被禁止。
- 默认情况下,这些计算机上禁用 WinRM。
- 在那些机器上很难安装像 OpenSSH 这样的新软件(因为这个项目的规则)
- RDP 是连接这些机器的唯一方法。(我在所有机器上都有一个帐户)
如何通过 RDP 使用命令行从远程 Windows 机器复制文件?或者,至少,有什么方法可以通过 RDP 使用命令行在远程 Windows 机器上执行命令?
解决方案
我认为你可以做到这一点,虽然它很 hacky :)
对于只复制文件一次的基本设置,您需要做的是
- 登录时在远程会话中运行脚本。我可以想到三种方法来做到这一点:
- 使用“备用外壳”RDP 文件属性。这会在登录时运行一个指定的程序来代替 explorer.exe;例如,您可以使用它来运行“cmd.exe /c [您的脚本]”。
- 如果这不起作用(例如远程机器不尊重它),您可能能够使用在登录时运行脚本的计划任务,但可能仅适用于指定用户,或者脚本可能会检查 WinStation在执行任何操作之前键入以确保这实际上是 RDP 连接。
- 也可以通过以 RemoteApp 模式连接并使用脚本作为您的“应用程序”来执行此操作,但这仅适用于 Windows 的服务器版和企业版。
- 在 RDP 连接上启用驱动器重定向或剪贴板重定向,为您提供一种获取数据的方法。
- 驱动器重定向脚本要简单得多;您只需将远程脚本文件复制到例如“\\tsclient\C\logs”。
- 剪贴板重定向在理论上是可能的——你有远程脚本副本,然后是本地脚本粘贴——但在实践中可能会很痛苦。我只是在驱动器重定向由于某种原因不可用的情况下才提到它。
- 您可能想要编写脚本,然后在之后注销会话。
然后,您可以通过运行“mstsc.exe [您的 RDP 文件]”从命令行启动它。如果需要,可以通过编程方式生成 RDP 文件(假设您使用 80 台机器)。
如果您想要一个持久连接,您可以执行命令,这会更复杂,但在技术上仍然可行。我能想到的两种方法:
- 使用前面的方法在登录时运行程序,但这次创建一个自定义应用程序,该应用程序使用未阻塞的传输接收命令并在会话中执行它们。例如,我已经使用 WCF over HTTP 完成了这项工作;当然,这并不安全。
- 在远程机器上开发并安装一个服务,打开一个 RDP 虚拟通道,以及与之通信的相应 RDP 客户端插件。然后,您可以通过连接做任何您想做的事情。虽然这个解决方案最有可能奏效,但它也是最重量级且实施起来最耗时的,因此它可能是最后的手段。
推荐阅读
- javascript - 如何在 WKWebView 中禁用复制和粘贴(标注/弹出)?
- flutter - Flutter:无法通过回调将项目添加到列表中
- javascript - UncontrolledTooltip ReactStrap border over icon
- google-sheets - SUMPRODUCT 但仅在非空白单元格上
- microsoft-edge - JSON 错误:目录外的文件或目录
- java - Max/Msp 作为 Java 库?
- c++ - 随机分段错误 - Raspberry Pi、C++、MySQL
- slider - 是否可以在活动幻灯片附近添加滑动滑块的箭头?
- html - 如何检查网页中提供的确切字节?
- visual-studio-code - Visual Studio Code 的热键:在 MacOS 上更改热键“切换到编辑器”和“切换到编辑器组”