如何通过 SSH 在 Gnome 中使用 SFTP URL 远程打开 gedit?

如何通过 SSH 在 Gnome 中使用 SFTP URL 远程打开 gedit?

我的设置很奇怪,现在无法更改。我有两台机器:

  • local-machine:这是我的桌面,运行的是 Ubuntu 和 Gnome
  • remote-machine:它是一台虚拟机,也运行 Ubuntu,但没有 X

在两台机器上我都有我的私钥和公钥 SSH 密钥。

我需要从 运行 SSHremote-machinelocal-machine运行 gedit(在 中local-machine,在默认的 $DISPLAY 下),但通过 SFTP 打开文件remote-machine。如下所示:

myuser@remote-machine:~$ ssh local-machine "DISPLAY=:0.0 gedit sftp://remote-machine/some/file"

上述命令不起作用。gedit 显示以下消息:

Could not open the file sftp://remote-machine/some/file.
gedit cannot handle sftp: locations.

注意:

  • /some/file存在于remote-machine
  • 我可以使用我的 SSH 密钥正常地从 到remote-machine进行local-machineSSH 操作,没有任何问题!
  • 我可以DISPLAY=:0.0 gedit sftp://remote-machine/some/file在终端上运行该命令,并且 gedit可以毫无问题地local-machine打开该文件- 但是我在执行该命令的终端在 DISPLAY:0 中运行(真的,它是)。remote-machinegnome-terminal
  • 我也尝试了-tSSH 客户端选项(强制伪 tty 分配)但没有作用。
  • 如果我尝试DISPLAY=:0.0 gedit sftp://remote-machine/some/filelocal-machine但在 tty 下运行(例如在 中tty1,按<Ctrl>+<Alt>+<F1>),它不起作用——从 运行时我收到相同的错误remote-machine

我发现,如果我传递DBUS_SESSION_BUS_ADDRESS正确的环境变量,它就会起作用!所以,如果我做这样的事情:

myuser@local-machine:~$ env | grep DBUS_SESSION_BUS_ADDRESS > env.txt
myuser@local-machine:~$ scp env.txt remote-machine:

进而:

myuser@remote-machine:~$ ssh local-machine "DISPLAY=:0.0 $(cat env.txt) gedit sftp://remote-machine/some/file"

成功了!问题是我不在local-machine所以我无法获取此环境变量的正确值。还有其他方法可以实现此目的吗?

答案1

我找到了另一种获取环境变量的方法,而不是传递整个环境变量:将启动 SSH 会话的进程的 PID 从本地发送到远程机器,这样我们以后就可以从该 PID 获取所有环境变量。

当我从远程计算机运行 SSH 到本地计算机时,我会执行一个命令来从该 PID 获取环境(使用/proc/<PID>/environ),然后在该环境中执行该命令。请注意,这仅适用于 Linux(或具有的操作系​​统/proc)。

就像是这样的:

将本地机器上运行的 bash 的 PID 发送到远程文件:

user@local-machine:~$ ssh other-user@remote-machine "echo $$ > \$HOME/.local_bash_pid"

创建连接:

user@local-machine:~$ ssh other-user@remote-machine

在远程运行 SSH 以在本地执行命令:

other-user@remote-machine:~$ ssh user@local-machine "source <(cat /proc/$(cat $HOME/.local_bash_pid)/environ | tr '\0' ' ') && command-I-want-to-execute-on-that-environment"

相关内容