You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

通过PuTTY SSH连接远程Windows机器执行应用无窗口显示问题求助

解决PuTTY远程Windows启动GUI程序无窗口显示的问题

这个问题其实是Windows的会话0隔离机制在搞鬼,我碰到过好多次了,给你拆解下原因和解决办法:

为什么会出现这种情况?

从Windows Vista开始,微软引入了会话0隔离,把系统服务运行的会话(会话0)和用户交互式会话(比如你登录机器B后的桌面会话,通常是会话1、2这类)彻底分开了。你用PuTTY通过SSH远程连接机器B时,默认进入的是非交互式的后台会话,执行start notepad.exe后,记事本进程会跑到会话0里,但这个会话没有关联用户桌面,所以你在机器B的交互式桌面(哪怕是后续通过RDP创建的虚拟桌面)根本看不到窗口,只能在任务管理器里看到进程在后台运行。

具体解决办法

这里给你几个可行的方案,按优先级排序:

1. 改用远程桌面(RDP)连接(最推荐)

既然机器B是Windows系统,直接用RDP远程连接是最省心的。RDP会给你创建一个专属的交互式用户会话,你在这个会话里启动的任何GUI程序(包括记事本)都会直接显示在RDP的虚拟桌面上,Alt+Tab也能正常切换。而且机器B有没有物理显示屏完全不影响,RDP本身就是基于虚拟桌面运行的。

2. 用psexec指定会话启动程序(适合必须用PuTTY的场景)

如果你因为某些原因必须用PuTTY连接,那可以借助Sysinternals的psexec工具来把程序启动到正确的用户会话:

  • 第一步:在PuTTY的远程会话里,执行query user命令,查看机器B当前登录的用户对应的会话ID(比如输出里会显示类似USERNAME console 1 Active,这里的1就是会话ID)
  • 第二步:执行psexec -i <你的会话ID> notepad.exe,比如psexec -i 1 notepad.exe,这样记事本就会启动到指定的交互式会话桌面,你再通过RDP或者后续接显示屏就能看到窗口了。

3. 配置OpenSSH的交互式会话(进阶)

如果你用的是Windows自带的OpenSSH服务器,也可以修改配置让PuTTY连接时进入交互式桌面会话:

  • 打开机器B的C:\ProgramData\ssh\sshd_config文件
  • 找到Subsystem行,把默认的powershell.exe -NoLogo -NoProfile改成powershell.exe -NoLogo -NoProfile -WindowStyle Normal(或者改成cmd.exe /k
  • 重启OpenSSH服务,之后用PuTTY连接时,启动的程序会关联到交互式会话的桌面。不过这个方法有时候会受系统权限限制,不如前两个靠谱。

额外提醒

你之前关闭防火墙和UAC其实没必要,这个问题和这些设置无关,核心就是会话隔离的机制。如果用RDP的话,记得在机器B的系统属性里开启“允许远程连接到此计算机”的选项哦。

内容的提问来源于stack exchange,提问作者Corl

火山引擎 最新活动