Ich möchte eine Datei in Emacs öffnen, die sich auf einem Remote-Server befindet, mit Sudo-Funktionen auf dem Server. Ich kann lokale Dateien mit sudo über Tramp wie folgt öffnen:
C-x C-f /sudo::/home/user/file
Aber ich möchte sudo auf dem Server verwenden:
C-x C-f /sudo::user@server/home/user/file
Dies gibt mir jedoch Sudo-Befugnisse auf meinem lokalen Computer. Es fragt nach meinem Sudo-Passwort auf dem lokalen Computer. Gibt es eine Möglichkeit, sudo auf dem Server zu verwenden?
Übrigens: Emacs ist nicht auf dem Server installiert
Antworten:
Ab Emacs 24.3 wurde ein Analogon der alten
multi:
Syntax über den modernentramp-default-proxies-alist
Ansatz gelegt, sodass Sie ohne vorherige Konfiguration wieder Multi-Hops ausführen können. Einzelheiten finden Sie unter:C-hig
(tramp) Ad-hoc multi-hops
RETBei der neuen Syntax wird jeder 'Hop' durch getrennt
|
. Das Beispiel im Handbuch lautet:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETWelches verbindet sich erstens als
bird@bastion
und von dort nachyou@remotehost:/path
/ su: oder / sudo: auf Remote-Hosts
Sie können diese Syntax auch verwenden, um sudo / su zu rooten (oder natürlich jeden anderen Benutzer) auf einem Remote-Host:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETWichtig : Stellen Sie sicher, dass Sie den Hostnamen explizit angeben:
sudo:remotehost:
anstattsudo::
(siehe unten).Da dies immer noch den darunter liegenden Proxy-Mechanismus verwendet,
tramp-default-proxies-alist
sollte jetzt der Wert enthalten sein("remotehost" "root" "/ssh:you@remotehost:")
Dies bedeutet, dass der Proxy
/ssh:you@remotehost:
immer dann verwendet wird, wenn Sie eine Datei als anfordernroot@remotehost
.root
ist der Standardbenutzer für diese Methoden, aber Sie können natürlich auch zu einem Nicht-Root-Benutzer wechseln mit:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETGeben Sie den Remote-Hostnamen immer explizit an
Sie sind wahrscheinlich daran gewöhnt, den Hostnamen zu verwenden
sudo::
odersu::
wegzulassen. Wenn Sie auf dem lokalen Host bleiben, ist dies immer noch in Ordnung. Wenn Sie jedoch zu einem Remote-Server springen, müssen Sie den Hostnamen für jeden Hop angeben - auch wenn er mit dem vorherigen Hop identisch ist. Verwenden Sie immersudo:hostname:
odersu:hostname:
mit Remote-Hosts.Die Falle hier ist, dass
sudo::
sie tatsächlich zu funktionieren scheint. Wenn Sie dies jedoch tun, ist der Host für den dynamischen Proxy-Eintrag der Hostname, von dem Sie stammen, und nicht der Host, mit dem Sie verbunden sind. Dies sieht nicht nur verwirrend aus (da der falsche Host in den Dateipfaden angezeigt wird), sondern bedeutet auch, dass jeder nachfolgende Versuch, ihnsudo::
auf Ihrem lokalen Host zu verwenden, stattdessen an den Remote-Server weitergeleitet wird! (und der Proxy wäre vermutlich auch überlastet, wenn Sie dasselbe auf einem zweiten Server tun würden, was weitere Probleme verursachen würde).Kurz gesagt, nicht verwenden,
::
wenn Sie Multi-Hop!quelle
/sudo:hostname:/etc/hosts
, erhalte ich das, was Sie erwarten würden, aber wenn ich tippe/sudo:abbrev:/etc/hosts
, erhalte ich die Meldung "Host abbrev sieht aus wie ein Remote-Host, sudo kann nur den lokalen Host verwenden". Ist das reparabel?.ssh/config
Einträge und ich habe keine Probleme damit,/ssh:abbrev|sudo:abbrev:/etc/hosts
meine Hostnamen-Abkürzungen zu verwenden. Es sieht so aus, als würden Sie nicht zuerst zum Host springen.tramp-default-proxies-alist
scheint korrekt zu sein. Das oben beschriebene Verhalten bleibt jedoch bestehen. Ist meine Konfigurationsdatei irgendwie falsch?/sudo:abbrev:/etc/hosts
wie Sie es in Ihrem vorherigen Kommentar eingegeben haben (was, wie erwähnt, falsch ist), oder ob Sie das Richtige verwenden/ssh:abbrev|sudo:abbrev:/etc/hosts
. Ihre ssh-Konfigurationsdatei ist vermutlich in Ordnung, da Sie sie offensichtlich anderweitig verwenden können.Update : Obwohl diese Antwort das ursprüngliche Problem gelöst hat, wurde sie für Emacs 20 oder 21 geschrieben. Für Emacs 24 empfehle ich die Antwort von Phils, da sie mehr Erklärungen bietet und auf dem neuesten Stand ist.
Ich denke, Multi-Hop-Dateinamen in Tramp sind das, wonach Sie suchen.
Der erste Sprung wäre ssh und der zweite wäre sudo.
Update: Neuere Versionen von Emacs unterstützen mehrere Hops mithilfe von Proxys:
Rufen Sie dann durch Öffnen auf:
quelle
Ich hatte einige Probleme mit der ausgewählten Antwort. Es hat jedoch funktioniert, als ich diese Zeile zu .emacs hinzugefügt habe:
Und dann folgendes ausgeführt:
/sudo:ssh-host:file-on-ssh-host
Es war etwas verwirrend, weil ich irgendwann zur Eingabe des "root" -Kennworts aufgefordert wurde, aber die Eingabe des Kennworts meines Benutzers mir Zugriff gewährte. Es funktioniert auch universell auf allen Hosts im Netzwerk. Außerdem kann ich das immer noch tun, um nicht root zu sein:
/ssh:ssh-host:file-on-ssh-host
quelle
abc.xyz.com' looks like a remote host,
sudo 'kann nur den lokalen Host verwenden", sobald ich den zweiten Doppelpunkt in "/sudo:abc.xyz.com:" eingebe. Ideen? Emacs 23.1.1 unter Ubuntu 10.04 LTS.Von der Tramp Multi-Hops-Konfigurationswebseite
Dann keine
öffnet die Datei mit sudo, nachdem sie mit demselben Benutzernamen des Benutzers angemeldet wurde, der emacs ausführt, jedoch auf dem Remotecomputer.
quelle
Sie müssen zuerst ssh in den Server, dann müssen Sie Emacs lokal ausführen.
Oder Sie können NFS mit no_root_squash verwenden oder es mit emacs Server / Client versuchen, obwohl ich keine Ahnung habe, was passieren kann (verwenden Sie emacs nicht selbst).
quelle