在原始计算机上通过 ssh 运行命令

在原始计算机上通过 ssh 运行命令

我有一台本地机器,nostromo在 debian 测试中运行交互式 cinnamon 桌面。在它上面,我有 gnome-terminal 运行,并有一个向远程计算机打开的 ssh 终端sulaco。我想在 ssh 终端中运行一个命令,这样它的行为就好像我从本地终端运行它一样。例如:

mooseboys@nostromo:~$ ssh sulaco
mooseboys@sulaco:~$ run-on-ssh-origin xeyes

鉴于上面的代码,我正在寻找类似的东西run-on-ssh-origin最终xeyes在我本地现有的桌面环境中运行,即就像我在另一个本地 gnome 终端中运行它一样。

我知道的唯一解决方案是从ssh 终端运行另一个ssh命令:nostromosulaco

mooseboys@sulaco:~$ ssh nostromo xeyes

这适用于非 GUI 命令,但对于 X 应用程序,它似乎不会在现有交互式桌面上创建窗口。我确信有一种方法可以枚举桌面并注入命令来运行,但我正在寻找更简单、更强大的方法。理想情况下,类似的东西run-on-ssh-origin存在,但如果没有,有没有办法指定例如通过 SSH 运行的 GUI 应用程序应该使用现有的交互式桌面(如果存在)?

答案1

非 GUI 命令运行的原因是因为您在终端链中运行它们(nostromo->sulaco->nostromo)。

要使 X11 应用程序以这种方式工作,您只需在所有客户端和服务器上启用 X11 转发即可。诺斯特罗莫是这里的服务员。然后,您将有效地将 X11 输出从 server2 转发到 server1 到客户端,尽管这在技术上是可能的,但在这种精确配置中会有点拖累性能并且有点浪费

不过,您可以简单地从 ssh 命令中更改显示环境变量:

ssh nostromo 'DISPLAY=:0; xeyes'

这会将 X11 输出重定向到本地显示器:0,您可能拥有也可能不拥有并有权使用该显示器。这也会直接影响您可以根据引号要求发送哪种命令。

您需要知道客户的本地显示号码。对于单个用户,这通常是:0.但情况可能有所不同。

相关内容