如何通过ssh让win11 前台打开应用程序?

开启了win11的sshd服务 可以通过ssh连接以后跑脚本
我用ssh 运行某exe 从任务管理器里能看到 但是前台没有

有啥办法用ssh让gui前台运行应用程序?
以及…如何在锁定界面 甚至是 账户未登录状态 运行应用程序?

直接运行是可以的啊,是不是和具体的程序有关?

GUI的程序好像都不行
举例 我ssh连接win11后执行 D:\Program Files\Notepad2\Notepad2.exe
前台从任务管理器里能看到 Notepad2.exe 但是前台GUI没显示出来

比如其他一些我想运行的程序 这样操作以后 进程是有了 但是并没有真正运行起来。 我自己搞了个 webhook 触发执行脚本的项目在跑,想通过它再ssh控制win11 自动开启 比如游戏手柄的控制软件 或者 自动运行同步文件的应用,但是直接走ssh它只显示有进程但不会运行。

看一下运行的程序是以什么用户权限运行的?

我是ssh 登录账户 和前台 登录运行的账户是同一个

应该不是账户权限问题 因为后台进程能看到 只是程序没有在到前台运行
我也试过ssh登录管理员账户运行 结果也是不行

这个似乎无解,替代方案都不完美,最后一个帖子的方案看起来比较好一点,链接中说的比较详细的说明,你看一下把吧

user interface - Starting GUI programs via OpenSSH on Windows? - Stack Overflow

非常感谢 看了你这个帖子 我自己尝试了下
用终端调用psexec 来执行exe成功 但是ssh远程调用则不成功
不过好在通过创建计划任务 再用schtasks.exe调用的方案成功了

先创建111.bat

start "" "D:\test.exe"
EXIT

然后再创建计划任务
image
最后

ssh user@host "schtasks.exe /run /tn "tasker001""

成功运行

确实是和具体的程序有关,比如计算器就没问题,记事本、画图则是进程会直接退出,lz提到的notepad2则是有进程但是没gui

这个不是用 psexec 在指定的 session 中运行就好了吗?比如我在 PowerShell 的 profile 里定义了以下函数

function Remote-Run {
	$User = $env:USERNAME
	$Password = $(Get-Content "$Home\Documents\EFS\windows.pass")
	$ComputerName = $env:COMPUTERNAME
	$ProcessId = Invoke-Command -ScriptBlock  {
		Param($User)
		$Sessions = query session $User;
		return $Sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];
	} -ArgumentList ($User)
	PsExec \\$ComputerName -u $User -p $Password -h -i $ProcessId $Args
}

其中 $Home\Documents\EFS\windows.pass 就是把当前用户的密码写在了一个 EFS 保护的文件夹里,至少保证在没有登陆的情况下无法获取其中的内容,$ProcessId 其实应该是 session id, 但是这段代码是我从一个国外的论坛中学到的,就没改变量名(实际上 console session 一般都是 1 号 session)需要管理员权限运行,但是 Windows 默认 SSH session 都是管理员权限的所以应该没啥问题。在当前 session 运行的时候好像会有报错来着,搜一下错误信息应该就能找到一个允许本地添加 service 之类的策略组,设置一下就好了。

好像略复杂了…我还是用计划任务算了 :rofl:

我目前有个7X24的docker容器接受外网 http请求 根据请求执行shell命令
而这容器比较精简 只有这个webhook 和 ssh 相关的组件 没其他功能了

这个容器不只是用来调用windows主机执行动作 也用于调用其他 linux主机 或者容器 执行各种动作 不想乱动这容器… 还是计划任务用用算了