我一直在尝试让 psexec 从 Visual Studio 中的自定义构建任务在远程机器上运行可执行文件。所有这些命令都可以从命令行运行,但从应用程序运行它似乎是个问题。一些命令有效,其他 psexec 挂起,因此 msbuild 和 Visual Studio 2005 也有效。在这种情况下,我调用了 SharePoint 的 stsadm.exe,但是当从应用程序运行 psexec 时,很多程序都会出现这个问题。有很多人遇到这个问题,但似乎没有解决方案,所以我的问题是:有没有人知道 psexec 的可行替代方案?
3 回答
在对远程系统执行 PSEXEC 时,我经历过“挂起”,但我总是将其归因于远程进程在其中运行的安全上下文。
来自 PSEXEC 的帮助:
如果您省略用户名,远程进程将在您执行 PsExec 的同一帐户中运行,但由于远程进程正在模拟,它将无法访问远程系统上的网络资源。当您指定用户名时,远程进程在指定的帐户中执行,并且将有权访问该帐户有权访问的任何网络资源。请注意,密码以明文形式传输到远程系统。
如果您远程执行一个进程,然后需要访问数据库 (stsadm.exe),那么尝试访问网络资源可能会失败,具体取决于 PSEXEC 的执行方式。如果是这样的话,我想它最终会超时并给出某种资源不可用的消息。
在对远程机器执行部署步骤以防止您描述的行为时,通常会做两件事:
就像提到的 rifferte 一样,在使用 PSEXEC 执行脚本(*.bat、*.vbs、*.ps 等)之前,确保部署所需的所有资产都是远程机器本地的(复制文件 等) - 以便一切运行远程机器的“本地”。
执行时使用域用户名/密码运行 PSEXEC - 请注意,此信息以明文形式传递给远程服务器。
总是有RCE。
RemCom 是一个小型(10KB upx 打包)remoteshell / telnet 替代品,可让您在远程 Windows 系统上执行进程,在远程系统上复制文件,在那里处理输出并将其流回。它允许直接使用完整的交互式控制台执行远程 shell 命令,而无需安装任何客户端软件。在本地机器上,它也可以模拟,因此可以用作 Runas 命令的静默替代品。
您可以尝试让 psexec 调用一个 bat 程序,该程序在远程计算机上执行您需要的操作。我在 installutil.exe 中遇到了这个问题。远程机器上的一个简单的 bat 文件解决了它。
您还应该在 sysinternals 板上分享您的经验。在未来的修订中,他们可能会做一些事情。