通过SSH执行.exe安装程序管理员权限失效问题排查
问题原因
- Windows OpenSSH服务默认对非交互式单命令执行场景做了权限限制:即便登录账号属于本地管理员组,系统也会使用过滤后的受限访问令牌启动进程,不会授予完整管理员权限,进程实际运行权限和标准普通用户完全一致。这就是为什么非交互执行安装时表现和普通用户运行完全相同,没有权限写入系统目录、注册表项导致安装静默失败。而交互式SSH会话(登录后逐行输入命令)会走完整的用户登录令牌生成流程,能够获取账号对应的完整权限,因此可以正常执行安装。
- Windows的Session 0会话隔离机制也会造成影响:非交互SSH命令启动的进程默认运行在Session 0系统会话中,Chrome静默安装流程需要写入交互式用户配置、生成桌面/开始菜单快捷方式,Session 0没有关联的已登录交互式用户,也会导致安装流程无报错中断。
解决方案
按优先级从高到低选择以下方案即可:
- 方案1:显式调用PowerShell的启动进程参数触发完整权限运行,同时等待安装完成避免SSH会话提前断开。
如果远端OpenSSH默认shell为PowerShell,直接执行:
如果远端OpenSSH默认shell为CMD,调整为嵌套调用PowerShell执行:ssh root@10.0.10.26 "Start-Process -FilePath 'C:\Users\Public\Downloads\ChromeInstaller.exe' -ArgumentList '/silent /install' -Verb RunAs -Wait"ssh root@10.0.10.26 "powershell -Command \"Start-Process -FilePath 'C:\Users\Public\Downloads\ChromeInstaller.exe' -ArgumentList '/silent /install' -Verb RunAs -Wait\"" - 方案2:修改远端系统注册表关闭远程UAC令牌过滤,让管理员账号的非交互SSH会话默认获取完整权限。
- 远端机器打开注册表编辑器,定位到
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System路径 - 新建名为
LocalAccountTokenFilterPolicy的DWORD类型值,将数值设置为1 - 重启
OpenSSH SSH Server服务后配置生效,后续直接执行原安装命令即可正常运行。
*注意:该配置会降低系统远程访问安全等级,仅建议在内网测试环境使用。
- 远端机器打开注册表编辑器,定位到
- 方案3:兼容性最高的批量部署方案,通过SSH调用系统计划任务,指定安装程序以SYSTEM权限在交互式会话运行,安装完成后自动删除对应计划任务即可,不会出现权限或会话隔离相关问题。
内容的提问来源于stack exchange,提问作者jbtalbot
相关产品推荐
相关产品推荐

