开启了win11的sshd服务 可以通过ssh连接以后跑脚本
我用ssh 运行某exe 从任务管理器里能看到 但是前台没有
有啥办法用ssh让gui前台运行应用程序?
以及…如何在锁定界面 甚至是 账户未登录状态 运行应用程序?
开启了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
然后再创建计划任务
最后
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 之类的策略组,设置一下就好了。
好像略复杂了…我还是用计划任务算了
我目前有个7X24的docker容器接受外网 http请求 根据请求执行shell命令
而这容器比较精简 只有这个webhook 和 ssh 相关的组件 没其他功能了
这个容器不只是用来调用windows主机执行动作 也用于调用其他 linux主机 或者容器 执行各种动作 不想乱动这容器… 还是计划任务用用算了