![在原始计算机上通过 ssh 运行命令](https://linux22.com/image/153486/%E5%9C%A8%E5%8E%9F%E5%A7%8B%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我有一台本地机器,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
命令:nostromo
sulaco
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
.但情况可能有所不同。