Wie kann man gedit mit SFTP-URL in Gnome über SSH remote öffnen?

1

Mein Setup ist komisch und ich kann es jetzt nicht ändern. Ich habe zwei Maschinen:

  • local-machine: Es ist mein Desktop, auf dem Ubuntu mit Gnome ausgeführt wird
  • remote-machine: Es ist eine virtuelle Maschine, auf der auch Ubuntu ausgeführt wird, jedoch ohne X

In beiden Maschinen habe ich meine privaten und öffentlichen SSH-Schlüssel.

Ich muss SSH von remote-machinebis local-machineausführen und gedit (in local-machine, unter dem Standardwert $ DISPLAY) ausführen, aber eine Datei remote-machineüber SFTP öffnen. Etwas wie das:

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

Der obige Befehl funktioniert nicht. gedit zeigt diese Nachricht an:

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

Beachten Sie, dass:

  • /some/fileexistiert am remote-machine.
  • Ich kann normalerweise von SSH remote-machinezu local-machineSSH meinen Schlüssel ohne irgendwelche Probleme benutzen!
  • Ich kann den Befehl DISPLAY=:0.0 gedit sftp://remote-machine/some/filein einem Terminal ausführen local-machineund gedit öffnet die Datei remote-machineohne Probleme - aber das Terminal, in dem ich den Befehl ausgeführt habe, läuft in DISPLAY: 0 (wirklich, es ist gnome-terminal).
  • Ich habe auch versucht, einen -tSSH-Client zu verwenden (um eine Pseudotty-Zuweisung zu erzwingen), aber es hat nicht funktioniert.
  • Wenn ich versuche zu laufen DISPLAY=:0.0 gedit sftp://remote-machine/some/filein , local-machineaber unter einem tty (zum Beispiel in tty1, durch Drücken <Ctrl>+<Alt>+<F1>) es nicht nicht - ich bekomme die gleichen Fehler , wenn die Ausführung von remote-machine.

Ich fand, dass, wenn ich die Umgebungsvariable DBUS_SESSION_BUS_ADDRESSmit einem korrekten Wert übergebe, es funktioniert! Also, wenn ich so etwas mache:

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

und dann:

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

Es klappt! Das Problem ist, dass ich nicht aktiv bin undlocal-machine daher nicht den richtigen Wert für diese Umgebungsvariable erhalten kann. Gibt es eine andere Möglichkeit, diese Arbeit zu machen?

Álvaro Justen
quelle

Antworten:

1

Ich habe eine andere Möglichkeit gefunden, Umgebungsvariablen abzurufen, anstatt die gesamten Umgebungsvariablen zu übergeben: Senden Sie die PID des Prozesses, der die SSH-Sitzung gestartet hat, von lokal zu remote an den Remotecomputer, damit wir später alle Umgebungsvariablen von dieser PID abrufen können.

Wenn ich SSH von einem entfernten auf einen lokalen Computer /proc/<PID>/environstarte, führe ich einen Befehl aus, um die Umgebung von dieser PID zu erhalten (mit ) und führe dann den Befehl in dieser Umgebung aus. Beachten Sie, dass dies nur mit Linux (oder Betriebssystemen mit /proc) funktioniert .

Es ist ungefähr so:

Sendet die PID der Ausführung von bash auf dem lokalen Computer an eine Datei auf der Remote-Seite:

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

Erstellen Sie die Verbindung:

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

Führen Sie SSH auf Remote aus, um einen lokalen Befehl auszuführen:

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"
Álvaro Justen
quelle