PsPasswd(7.19):远程修改密码的边界与合规建议
PsPasswd(7.19):远程修改密码的边界与合规建议
- PsPasswd(7.19):远程修改密码的边界与合规建议
- 你将收获
- 1)PsPasswd 是什么?能做什么 / 不能做什么
- 2)前置条件与安全基线
- 3)语法速览(最小记忆集)
- 4)常见场景与命令模板
- 4.1 单机:安全修改本地 Administrator
- 4.2 指定连接凭据(域运维账号去连目标机)
- 4.3 批量轮换(主机清单)
- 4.4 与服务账号的关系
- 5)合规与审计要点
- 6)批量轮换示例(PowerShell 包装)
- 7)常见报错 → 定位与修复
- 8)最佳实践清单
- 9)一页速查(可收藏)
- 小结
PsPasswd(7.19):远程修改密码的边界与合规建议
目标:用 PsPasswd 在不登录目标机的情况下,安全地批量修改本地账户密码,并明确其在域环境中的适用边界与合规注意点。
你将收获
- PsPasswd 的定位、能力边界与风险点
- 常见场景的稳妥用法模板(单机 / 批量 / 轮换)
- 合规与审计要点(最小权限、留痕、回滚)
- 出错速查与小脚本(可直接拿来用)
1)PsPasswd 是什么?能做什么 / 不能做什么
PsPasswd 是 Sysinternals PsTools 家族的密码修改工具,典型能力:
- 对 本机或远程主机 的本地账户(如
Administrator、运维本地管理员)重置密码 - 支持
\\host1,host2或@hostlist.txt批量操作 - 可用
-u/-p指定用于连接远程主机的管理凭据(注意:这是连接凭据,不是要修改的账号)
边界提醒
- 首选用于“本地账户”密码轮换。
- 域账户密码的修改与管理,请优先使用 AD 工具链(如
Set-ADAccountPassword、LAPS/Entra、Privileged Access Management),以满足审计与合规。
2)前置条件与安全基线
- 权限:对目标机具备本地管理员或等效权限(用于连接目标机)
- 网络:开放 TCP/445(SMB)、RPC 相关端口;DNS 与时间同步正常
- 共享:目标机 Admin$ 未禁用(PsTools 依赖)
- EDR/防护:允许 PsTools 远程管理行为(白名单)
- 口令策略:目标机/域的复杂度、最短口令长度、历史、锁定策略会强校验
3)语法速览(最小记忆集)
pspasswd \\HOST [-u <connUser> [-p <connPass>]] <TargetLocalAccount> [<NewPassword>]
pspasswd \\HOST1,HOST2 <TargetLocalAccount>
pspasswd @hosts.txt <TargetLocalAccount>
要点
- 省略
<NewPassword>会交互式输入(更安全,避免明文留痕) -u/-p是连接远程时使用的管理凭据;被修改的账号在命令末尾单独写- 支持批量:
\\A,B,C或@hosts.txt(每行一台主机)
4)常见场景与命令模板
4.1 单机:安全修改本地 Administrator
:: 交互式输入新口令(推荐)
pspasswd \\PC-001 Administrator
4.2 指定连接凭据(域运维账号去连目标机)
pspasswd \\PC-001 -u CORP\opsadmin -p ****** Administrator
4.3 批量轮换(主机清单)
:: hosts.txt:每行一台,如
:: PC-001
:: PC-002
pspasswd @hosts.txt -u CORP\opsadmin -p ****** Administrator
4.4 与服务账号的关系
如果某Windows 服务/计划任务使用了被重置的账号口令,服务将启动失败。
建议顺序:
1)先盘点“以某账号运行”的服务/任务 →
2)改口令 →
3)使用 PsService 或 sc.exe 同步更新服务登录口令并重启服务。
5)合规与审计要点
-
最小暴露:避免在命令行直接写明文口令(会被命令历史/进程列表捕获),优先交互式输入
-
审批与留痕:变更单、操作日志、产出机列表与结果汇总
-
回滚预案:批量改密前导出本地管理员清单、服务依赖账号清单
-
日志审计:
- 本地/域安全日志会记录“密码更改/重置”事件(目标机与域控)
- 与 PsLogList(7.18) 联动拉取对应时间窗口日志,形成闭环证据
6)批量轮换示例(PowerShell 包装)
交互式输入新口令(不会在命令行明文出现),支持失败重试、结果落盘。
param([Parameter(Mandatory=$true)] [string]$HostListPath, # e.g. .\hosts.txt[Parameter(Mandatory=$true)] [string]$ConnUser, # e.g. CORP\opsadmin[Parameter(Mandatory=$true)] [string]$LocalAccount # e.g. Administrator
)$SecureNew = Read-Host "请输入新密码(将用于 $LocalAccount)" -AsSecureString
$NewPlain = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureNew))$Hosts = Get-Content $HostListPath | Where-Object {$_ -and $_ -notmatch '^\s*#'}
$ts = Get-Date -Format "yyyyMMdd_HHmmss"
$logOk = ".\Rotate_OK_$ts.csv"
$logNg = ".\Rotate_FAIL_$ts.csv"
"Host,Account,Result" | Out-File $logOk -Encoding UTF8
"Host,Account,Error" | Out-File $logNg -Encoding UTF8foreach($h in $Hosts){try{$cmd = "pspasswd \\$h -u $ConnUser $LocalAccount $NewPlain"$p = Start-Process -FilePath cmd.exe -ArgumentList "/c $cmd" -WindowStyle Hidden -PassThru -Waitif($p.ExitCode -eq 0){"$h,$LocalAccount,OK" | Out-File $logOk -Append -Encoding UTF8Write-Host "[OK] $h" -ForegroundColor Green}else{"$h,$LocalAccount,ExitCode=$($p.ExitCode)" | Out-File $logNg -Append -Encoding UTF8Write-Warning "[NG] $h ExitCode=$($p.ExitCode)"}}catch{"$h,$LocalAccount,$($_.Exception.Message.Replace(',',' '))" | Out-File $logNg -Append -Encoding UTF8Write-Warning "[NG] $h $($_.Exception.Message)"}
}# 内存清理(减少留痕)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureNew)
) | Out-Null
注意:脚本中为调用 PsPasswd 仍需明文传参,这一步只在内存中短暂存在;请在可信跳板机上执行,并确保日志不含口令。
7)常见报错 → 定位与修复
| 报错/现象 | 可能原因 | 处理建议 |
|---|---|---|
Access is denied. | 连接凭据不是本地管理员 / Admin$ 被禁用 / UAC 远程限制 | 提升权限;开启 Admin$;必要时参考 UAC 远程限制策略(更推荐使用域受控账号) |
The network path was not found. | DNS/路由/主机离线 | 检查解析与连通;ping \\HOST\admin$ |
The RPC server is unavailable. | 135/RPC 或动态端口被防火墙拦截 | 放行端口;与安全团队核对策略 |
The user name could not be found. | 目标本地账户不存在 | 先 net user 校验或改正确账户名 |
The password does not meet the password policy requirements. | 复杂度/最小长度/历史冲突 | 按策略重设;先查询本地或域策略 |
| 服务启动失败 | 服务使用了被改口令的账号 | 改完口令后,同步更新服务登录口令并重启服务(PsService/sc.exe) |
8)最佳实践清单
- 优先域方案:域设备的本地管理员轮换,优先 LAPS/Entra;PsPasswd 作为补充
- 交互式输入:尽量不在命令行写明文口令
- 批量前单机:先单机验证策略与依赖,再批量
- 与日志联动:PsLogList 拉取对应时间段安全日志做闭环审计
- 留痕与回滚:保存成功/失败清单;准备回退路径(临时应急口令、远程控制台)
9)一页速查(可收藏)
:: 单机(交互式)
pspasswd \\PC-001 Administrator:: 指定连接凭据
pspasswd \\PC-001 -u CORP\opsadmin -p ****** Administrator:: 批量
pspasswd @hosts.txt -u CORP\opsadmin -p ****** Administrator:: 改口令后同步服务账号(示例)
psservice \\PC-001 setconfig MySvc obj=.\Administrator password=******
psservice \\PC-001 restart MySvc
小结
- PsPasswd 是本地账号密码轮换的利器,快、轻、可批量;
- 在域环境,优先使用集中口令管理方案,把 PsPasswd 作为应急/补充;
- 牢记最小权限、避免明文、留痕审计与回滚预案,才能做到“安全地把事办成”。
下一篇:PsService·上(7.20)——Query/Config/Depend/Security 全面解析。
