:谁注入了 DLL?谁占着文件不放?一篇教你全搞定)
个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化PsTools 学习笔记7.8远程连接选项——连接性、超时、会话与安全基线1. 问题背景PsExec 远程连接为什么经常“看起来能用现场却翻车”2. PsExec 远程连接的底层通路与前置条件2.1 远程通路的最小验证2.2 必须满足的基础条件3. 远程常用选项真正该记住的是这些4. 慢链路 / 高丢包场景稳态参数组合4.1 可靠优先一次到位4.2 差分热修最小带宽5. 会话与可见性-i、-h、-x 的正确理解5.1 查看远端会话5.2 -x 要慎用6. PsExec 远程连接流程图从命令到远端执行7. 常见故障速修表从症状反推断点8. 安全基线远程执行不能只追求“跑通”8.1 凭据不要裸奔8.2 端口只对运维范围开放8.3 事后必须清理9. 脚手架模板复制后按现场改参数9.1 批量稳发清单文件执行9.2 一次性交互诊断9.3 限权后台执行9.4 远端工作目录固定10. 我的实战判断PsExec 稳定性的关键不是参数多而是链路清楚11. 小结1. 问题背景PsExec 远程连接为什么经常“看起来能用现场却翻车”在 PsTools 家族里PsExec 是最常用、也最容易被误用的工具。它看起来只是一条远程执行命令但真正落到企业环境里背后牵涉 SMB、ADMIN$、RPC、SCM、远程服务、会话隔离、UAC 令牌、防火墙和安全软件拦截。很多人排查 PsExec 失败时只盯着一条报错例如Access is denied、The network path was not found、PSEXESVC could not be installed。这很容易跑偏因为这些报错只是结果不是链路本身。这篇文章的目标不是把 PsExec 参数简单列一遍而是围绕远程连接选项建立一套可落地的判断框架先看远程通路再看连接超时再看会话可见性最后看安全基线和故障速修。下面这张图展示的是本文的整体结构PsExec 远程连接不是单点动作而是由连接通路、超时控制、会话交互和安全基线共同组成。从图中可以看出PsExec 的稳定性不是靠“多试几次”堆出来的。真正稳定的做法是先确认 SMB/RPC/会话通道是否成立再根据慢链路、交互执行、安全隔离等不同场景选择参数组合。我的判断是PsExec 排障不要先问“命令怎么写”而要先问“远端链路是否满足执行条件”。命令只是表层通路才是根。2. PsExec 远程连接的底层通路与前置条件PsExec 不是魔法。它远程执行命令的大致过程可以理解为三步先通过ADMIN$把远程服务组件复制到目标机再通过SCM 服务控制管理器创建并启动远程服务最后由该服务承载远端命令并把输入输出回传回来。这也是为什么 PsExec 经常会被 445、135、防火墙、EDR、UAC 令牌这些因素影响。只要其中任意一个环节断掉最终表现出来可能都是“连接失败”或“访问被拒绝”。这张图展示了 PsExec 远程连接的核心链路管理端通过 SMB 访问 ADMIN$再通过 RPC/SCM 创建远端服务最终在目标主机上运行 PSEXESVC 并执行命令。从图里能看出PsExec 的前置条件至少包括四类ADMIN$ 共享可用、SMB 445 可达、SCM/RPC 可用、具备远端管理员权限。如果你只验证了 ping 通但没有验证 ADMIN$ 和 SCM那这个排查是不完整的。2.1 远程通路的最小验证现场排查时我建议不要一上来就执行复杂的 PsExec 命令。先用下面几条命令确认基础链路。ping PC-001 dir \\PC-001\Admin$ sc \\PC-001 query type service这三条命令分别验证目标是否在线、ADMIN$ 是否可访问、SCM/RPC 是否可用。它们比直接上 PsExec 更适合作为第一轮诊断动作。推荐做法先验证通路再执行远程命令。这样失败时能更快定位是网络、权限、共享、RPC还是安全软件拦截。2.2 必须满足的基础条件在企业桌面或服务器环境中PsExec 稳定运行通常需要满足以下条件条件说明排查命令SMB 445 可达用于访问 ADMIN$ 和复制组件Test-NetConnection PC-001 -Port 445RPC 135 可达用于远程服务控制Test-NetConnection PC-001 -Port 135ADMIN$ 可访问默认指向远端 Windows 目录dir \\PC-001\Admin$具备管理员权限用于创建远端服务whoami /groups防火墙允许文件共享、远程服务管理需放行netsh advfirewall安全软件不阻断避免 PSEXESVC 被拦截查看 EDR/杀软日志不要把 ping 通当作 PsExec 可用的证据。ping 只能说明 ICMP 层面有响应不能证明 SMB、RPC、ADMIN$ 和 SCM 都正常。3. 远程常用选项真正该记住的是这些PsExec 参数很多但现场使用不应该把它当成背参数表。远程连接相关参数可以按四类理解目标、凭据、连接稳定性、执行上下文。选项作用使用建议\\host指定目标主机单机执行最常见\\list.txt从清单批量读取主机适合批量运维-u user指定远端登录用户名推荐域账号或受控运维账号-p pass指定密码不建议明文写入命令行-n N连接超时单位秒慢链路建议调大-c复制本地程序到远端再执行适合远端没有工具的情况-f强制覆盖远端文件部署固定版本时使用-v仅版本更新时复制节省带宽适合慢链路-r name自定义远端服务名避免默认 PSEXESVC 被策略命中-i指定交互会话需要 UI 可见时使用-h使用高完整性令牌管理员账户在 UAC 环境下常用-d不等待远端进程结束后台投递使用-w dir指定远端工作目录避免相对路径和日志路径异常一个比较典型的远程执行命令如下psexec \\app-01 -u domain\op -p ***** -n 45 -c -v -w C:\ops job.exe -arg1 -arg2这条命令的重点不是“参数多”而是它同时解决了几个现场问题指定凭据、放宽连接超时、复制工具、只在版本更新时复制并把工作目录固定到 C:\ops。PsExec 参数组合要围绕场景设计。慢链路、交互界面、后台投递、批量部署、安全审计参数组合都不一样。4. 慢链路 / 高丢包场景稳态参数组合分支机构、异地机房、VPN、弱网环境下PsExec 最容易出现连接超时、复制中断、执行结果不稳定等问题。这个时候不能只靠重复执行而应该从参数层面做稳态设计。这张图展示的是慢链路下的典型稳态组合延长连接超时、减少重复复制、使用自定义服务名、后台投递任务让任务尽量不被临时网络抖动打断。从图中能看到慢链路排障不是单纯“把超时时间调大”。更稳的组合是-n 负责连接容忍度-c -v 负责减少传输成本-r 负责服务名可控-d 负责避免本地会话长时间阻塞。4.1 可靠优先一次到位psexec \\edge-01 -n 90 -c -f -v -r psexec_opsvc -d ^ -w C:\ops\pkg deploy.exe /silent /log C:\ops\log\deploy.log这组参数适合边缘节点或弱网分支-n 90将连接超时拉长到 90 秒-c -f -v复制程序、必要时覆盖、仅高版本复制-r psexec_opsvc自定义远端服务名便于排查-d后台执行避免本地控制台一直等待-w C:\ops\pkg固定远端工作目录避免相对路径错位。推荐用于弱网分支部署、远程修复包投递、远端维护窗口内的无人值守执行。4.2 差分热修最小带宽psexec \\branch-05 -n 75 -c patch.dll -v rundll32.exe patch.dll,Entry如果只是投递一个小补丁或小组件-v 很有价值。它可以避免每次都重复复制相同文件尤其适合带宽有限的场景。弱网环境下不建议同时批量推送大文件到大量主机。先小范围试点再分批执行否则失败后很难判断是网络抖动、远端权限还是安全软件阻断。5. 会话与可见性-i、-h、-x 的正确理解PsExec 远程执行成功不代表用户桌面一定看得到界面。Windows 从 Vista 之后引入 Session 0 隔离服务运行在 Session 0而用户桌面通常在 Session 1、Session 2 或更高编号的会话中。所以当你远程执行一个带界面的程序却发现“进程有了界面没出现”不一定是程序没启动也可能是它启动在了错误的会话里。这张图展示了 PsExec 会话与可见性的关系Session 0 是隔离的系统会话用户真正能看到和交互的是登录后的用户会话必要时需要使用 -i 指定目标会话并配合 -h 使用高完整性令牌。从图中可以看出Session 0 与用户会话是隔离的。想让 UI 真正显示在用户桌面必须先确认目标用户在哪个 Session再决定是否使用 -i 。如果涉及管理员界面或需要提升令牌还要配合 -h。5.1 查看远端会话query session /server:PC-001如果目标用户在 Session 2可以这样执行psexec \\PC-001 -i 2 -h cmd.exe如果你只是执行后台脚本不需要界面那么不要随便加 -i。交互式执行适合诊断不适合所有批量运维任务。5.2-x要慎用-x 用于在 Winlogon 安全桌面显示界面这个参数不是常规运维动作。它适合非常少数需要安全桌面上下文的场景不建议普通脚本批量使用。不要把 -i 当成万能参数。很多服务端任务本来就不应该显示 UI强行交互反而会引入会话、权限和安全风险。6. PsExec 远程连接流程图从命令到远端执行为了把前面的内容串起来可以把 PsExec 远程执行理解为下面这条链路。只要链路中的某一环断掉最终就可能表现为连接失败、访问拒绝、服务安装失败、进程启动但无输出。否是否是否是否是是否本机执行 PsExec 命令目标主机是否可解析检查 DNS / IP / 路由SMB 445 是否可达检查文件和打印共享 / 防火墙ADMIN$ 是否可访问检查管理员权限 / Admin$ / UAC 远程限制RPC / SCM 是否可用检查 135 与动态 RPC 端口创建并启动 PSEXESVC安全软件是否拦截检查 EDR / 白名单 / 自定义服务名远端执行命令并回传输出检查退出码 / 日志 / 执行结果这个流程图的价值在于它能让排障从“猜报错”变成“查链路”。你可以按照 DNS、SMB、ADMIN$、RPC、SCM、安全软件、执行结果这个顺序逐项排除。这也是 Mark 式排障里很重要的一点用户看到的是报错工程师要还原的是链路。报错不是根因链路断点才是根因候选。7. 常见故障速修表从症状反推断点PsExec 的报错很多但真正高频的根因并不多。排查时不要被英文报错吓住先判断它属于网络路径、权限令牌、服务创建、会话显示还是远端路径问题。报错 / 现象高概率原因处理建议Access is denied.非管理员、UAC 远程限制、SMB 会话冲突核对管理员权限清理net use必要时评估LocalAccountTokenFilterPolicyThe network path was not found.DNS、路由、SMB 445 不通用 IP 测试检查 445确认文件共享启用The RPC server is unavailable.RPC 135 或动态端口被拦放行远程服务管理规则检查防火墙策略PSEXESVC could not be installedADMIN$ 不可写、杀软拦截、权限不足检查 ADMIN$改用管理员查看 EDR 日志进程启动但没 UI没有指定用户会话或缺少高完整性令牌使用query session再配合-i id -h命令偶发卡住慢链路、高延迟、管道输出过大加大-n使用-d减少输出回传远端找不到文件没有-c远端 PATH 或工作目录不对加-c或指定-w工作目录这里有一个经验判断如果错误是“路径找不到”优先查名称解析和 445如果是“访问拒绝”优先查账号权限、UAC 令牌和 ADMIN$如果是“服务安装失败”优先查 SCM、杀软和远端系统目录写入权限。8. 安全基线远程执行不能只追求“跑通”PsExec 的能力很强但它的风险也很直接远程复制、远程创建服务、远程执行进程。这些动作在安全软件、EDR、审计系统眼里都属于高敏行为。所以生产环境使用 PsExec必须有安全基线。这张图展示了 PsExec 使用时应该同时关注的两条线左边是最小权限、凭据安全、审计日志、防火墙和服务清理右边是快速排障路径帮助你在不扩大风险面的情况下恢复业务。从图中能看出安全不是最后才补的“注意事项”而是远程执行设计的一部分。真正稳的做法是策略先行、持续加固遇到故障时快速定位恢复后及时清理。8.1 凭据不要裸奔命令行里直接写 -p 密码 是最直观的做法但它也是最不推荐的做法。密码可能出现在命令历史、脚本文件、进程命令行快照、日志系统里。推荐优先使用当前域身份、交互输入密码、受控运维账号、cmdkey、LAPS 或企业密管系统。8.2 端口只对运维范围开放PsExec 需要 SMB 和 RPC但这不代表要对所有网段开放。企业环境里更合理的方式是只对运维网段、跳板机或受控管理终端开放必要端口。Test-NetConnectionPC-001-Port 445Test-NetConnectionPC-001-Port 1358.3 事后必须清理任务完成后建议检查是否有残留服务、残留文件和残留凭据。sc \\PC-001 query PSEXESVC sc \\PC-001 delete PSEXESVC net use \\PC-001\IPC$ /delete cmdkey /delete:PC-001不要在终端上长期保留临时放开的安全策略、明文凭据、残留服务或无审计的远程执行通道。9. 脚手架模板复制后按现场改参数下面给几组现场常用模板。实际使用时不要直接盲跑至少要改主机名、账号、路径和日志目录。9.1 批量稳发清单文件执行for /f %%H in (hosts.txt) do ( psexec \\%%H -n 75 -c -v -w C:\ops -r opsvc -d agent.exe -install )这个模板适合把一个工具或代理部署到多台终端。-n 75 提高弱网容忍度-c -v 控制复制行为-r opsvc 让服务名可控-d 后台投递。9.2 一次性交互诊断psexec \\host -i 1 -h powershell.exe -NoLogo -NoProfile这个模板适合你需要在远端用户会话里做一次交互诊断时使用。注意先确认 Session ID不要默认所有机器都是 Session 1。9.3 限权后台执行psexec \\app -l -belownormal -d -w C:\tasks task.exe /q这个模板适合后台低干扰任务。-l 限制权限-belownormal 降低调度优先级适合非紧急作业。9.4 远端工作目录固定psexec \\PC-001 -w C:\Temp cmd /c whoami result.txt如果程序依赖相对路径、配置文件或本地日志-w 很关键。很多“远程能启动但行为异常”的问题本质上就是工作目录不对。10. 我的实战判断PsExec 稳定性的关键不是参数多而是链路清楚PsExec 的远程连接选项表面看是参数问题实际是企业运维里的链路控制问题。你要知道命令从哪里发出经过什么端口依赖什么共享用什么权限在远端创建什么服务最后在哪个会话里运行。如果只是为了“跑一次命令”最简单的写法当然能用。但如果要做批量运维、远程修复、弱网部署、交互诊断就必须把连接、超时、会话、安全四件事分开看。我的建议可以收束为四句话先测通路DNS、445、ADMIN$、RPC、SCM再选参数慢链路用-n复制用-c/-v后台用-d会话用-i控制权限不要明文密码不要长期放宽 UAC 和防火墙保留证据日志、退出码、远端执行结果都要能回看。PsExec 是一把很锋利的运维工具。锋利本身不是问题不知道它切到了哪一层才是问题。11. 小结本文围绕 PsExec 远程连接选项梳理了底层通路、常用参数、慢链路稳态组合、会话与可见性、安全基线和故障速修。真正要带走的不是某个单独参数而是一套判断顺序。当 PsExec 失败时不要直接怀疑工具也不要反复试命令。先按链路排名称解析是否正常SMB 是否可达ADMIN$ 是否可写RPC/SCM 是否可用账号是否具备管理员权限EDR 是否拦截目标会话是否正确。当 PsExec 能跑通时也不要忽略安全。远程执行本身就是高权限动作必须做到凭据可控、端口可控、日志可追溯、服务可清理。把 PsExec 用稳的关键是把它从“一条远程命令”升级成“一套可审计、可验证、可回滚的远程执行流程”。 返回顶部点击回到顶部