使用 SSH 执行的应用程序不会显示在远程机器上

使用 SSH 执行的应用程序不会显示在远程机器上

我有一台机器 A,它使用 PuTTY 连接到机器 B。两台机器都装有 Windows 操作系统。

我想在机器 B 上打开记事本,当我输入启动记事本什么都没有发生,但是当我检查任务管理器(在机器 B 中)的进程选项卡中,我看到记事本正在运行。

机器 B 没有其他屏幕,即使检查 alt-tab,也没有记事本的窗口。

我已经关闭了防火墙和 UAC 设置,以防这是导致问题的原因。机器 B 上也没有安装防病毒软件。

任何帮助都将不胜感激!

答案1

SSH 不是原生的 Windows 管理工具(即使 Windows 10 具有它的功能)。相反,我会使用psexec它允许您在“交互式”窗口中远程运行任何应用程序,同时指定要运行的特定用户名和密码,以及特定的会话 ID(如果需要)。

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

https://serverfault.com/questions/453704/interactive-mode-of-psexec-not-working-for-console-application

https://forum.sysinternals.com/psexec-i-does-not-interact-with-remote-desktop_topic14473.html

答案2

通常,(SSH)服务器作为 Windows 服务运行。

窗口服务在单独的 Windows 会话中运行(谷歌搜索“会话 0 隔离”)。他们无法访问交互式(用户)Windows 会话。

还要注意,Windows 中可以有多个用户会话(多个登录用户)。SSH 服务器如何知道在哪个用户会话上显示 GUI(即使它可以)?


您可以在交互式 Windows 会话中运行 SSH 服务器,而不是将其作为服务运行。不过,它有其局限性。


总的来说,所有这一切(通过 SSH 在 Windows 上远程运行 GUI 应用程序)对我来说并不是一个好主意。

此外,这个问题更多是关于特定 SSH 服务器,而不是你正在使用的 SSH 客户端。因此,如果你提供有关 SSH 服务器的详细信息,你可以得到更好的答案。

答案3

为了使 Windows Win32 进程能够访问桌面 GUI,它需要在窗口站 "WinSta0". Win32 进程可以查询哪个窗口站它通过 运行GetProcessWindowStation

“ OpenSSH sshdfor Windows” 通常不会在任何窗口站,因此它启动的任何进程都无法访问任何桌面 GUI。这是一个纯命令行环境。

这是 Windows 的众多功能之一非常与类 Unix 操作系统不同,类 Unix 操作系统没有相当于窗口站

当然,您也可以sshd在 GUI 会话中手动启动,然后它执行的命令将在相同的窗口站从而可以访问相同的 GUI 桌面。但并非sshd始终以服务形式运行。

要在 GUI 会话中运行sshd,首先需要停止以 SYSTEM 身份运行(使用Stop-Service sshd管理员 powershell 或使用services.mscGUI)。然后,您只需sshd.exe从在 GUI 会话中打开的 cmd.exe 或 PowerShell 终端窗口中的命令行启动,然后 ssh 连接到该 sshd 进程即可访问您的 GUI 环境。但现在您只能通过 ssh 登录到 sshd 运行的一个用户帐户,因为 sshd 已经失去了更改用户的能力。

也可以看看https://github.com/PowerShell/Win32-OpenSSH/wiki/sshd或者https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps

相关内容