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 wirdremote-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 amremote-machine.- Ich kann normalerweise von SSH
remote-machinezulocal-machineSSH meinen Schlüssel ohne irgendwelche Probleme benutzen! - Ich kann den Befehl
DISPLAY=:0.0 gedit sftp://remote-machine/some/filein einem Terminal ausführenlocal-machineund gedit öffnet die Dateiremote-machineohne Probleme - aber das Terminal, in dem ich den Befehl ausgeführt habe, läuft in DISPLAY: 0 (wirklich, es istgnome-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 intty1, durch Drücken<Ctrl>+<Alt>+<F1>) es nicht nicht - ich bekomme die gleichen Fehler , wenn die Ausführung vonremote-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?