Chcę otworzyć plik wewnątrz Emacsa, który znajduje się na zdalnym serwerze, z uprawnieniami sudo na serwerze. Mogę otwierać pliki lokalne za pomocą sudo przez Tramp w ten sposób:
C-x C-f /sudo::/home/user/file
Ale chcę użyć sudo na serwerze:
C-x C-f /sudo::user@server/home/user/file
Ale to daje mi uprawnienia sudo na moim komputerze lokalnym, prosi o moje hasło sudo na komputerze lokalnym. Czy jest sposób na użycie sudo na serwerze?
BTW: Emacs nie jest zainstalowany na serwerze
Odpowiedzi:
Począwszy od Emacsa 24.3, analoga starej
multi:
składni została nałożona na nowoczesnetramp-default-proxies-alist
podejście, co oznacza, że możesz ponownie wykonywać wiele przeskoków bez wcześniejszej konfiguracji. Aby uzyskać szczegółowe informacje, zobacz:C-hig
(tramp) Ad-hoc multi-hops
RETW nowej składni każdy „przeskok” jest oddzielony
|
. Przykład w instrukcji:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETKtóry łączy się najpierw jako
bird@bastion
, a stamtąd doyou@remotehost:/path
/ su: lub / sudo: na zdalnych hostach
Możesz również użyć tej składni, aby sudo / su do roota (lub oczywiście dowolnego innego użytkownika) na zdalnym hoście:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETWażne : pamiętaj o jawnym podaniu nazwy hosta:
sudo:remotehost:
zamiastsudo::
(patrz poniżej).Ponieważ nadal używa mechanizmu proxy poniżej,
tramp-default-proxies-alist
powinno teraz zawierać wartość("remotehost" "root" "/ssh:you@remotehost:")
Oznacza to, że serwer proxy
/ssh:you@remotehost:
będzie używany za każdym razem, gdy zażądasz pliku jakoroot@remotehost
.root
jest domyślnym użytkownikiem dla tych metod, ale możesz oczywiście zmienić na użytkownika innego niż root za pomocą:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETZawsze jawnie określ nazwę zdalnego hosta
Prawdopodobnie jesteś przyzwyczajony do używania
sudo::
lubsu::
pomijania nazwy hosta. Jeśli przebywasz na hoście lokalnym, to nadal jest w porządku, ale jeśli przeskakujesz do zdalnego serwera, musisz określić nazwę hosta dla każdego przeskoku - nawet jeśli jest taka sama jak dla poprzedniego przeskoku. Zawsze używajsudo:hostname:
lubsu:hostname:
ze zdalnymi hostami.Pułapka polega na tym,
sudo::
że faktycznie wydaje się działać - jednak gdy to zrobisz, HOST dla wpisu dynamicznego serwera proxy będzie nazwą hosta, z którego pochodzisz, a nie hostem, z którym się łączyłeś. Nie tylko będzie to wyglądało na zagmatwane (ponieważ niewłaściwy host będzie wyświetlany w ścieżkach plików), ale będzie również oznaczać, że każda kolejna próba użyciasudo::
na twoim lokalnym hoście będzie zamiast tego przekazywana do zdalnego serwera! (a serwer proxy prawdopodobnie również zostałby zablokowany, gdybyś zrobił to samo na drugim serwerze, powodując dalsze problemy).Krótko mówiąc, nie używaj
::
podczas wykonywania wielu przeskoków!źródło
/sudo:hostname:/etc/hosts
, otrzymuję to, czego można się spodziewać, ale kiedy piszę/sudo:abbrev:/etc/hosts
, otrzymuję komunikat „Skrót hosta wygląda jak host zdalny, sudo może używać tylko hosta lokalnego”. Czy można to naprawić?.ssh/config
wpisy i nie mam żadnych problemów z używaniem/ssh:abbrev|sudo:abbrev:/etc/hosts
skrótów moich nazw hostów. Wygląda na to, że nie wskakujesz najpierw do hosta.tramp-default-proxies-alist
wydaje się być poprawny. Jednak zachowanie, które opisałem powyżej, utrzymuje się. Czy mój plik konfiguracyjny jest w jakiś sposób nieprawidłowy?/sudo:abbrev:/etc/hosts
co umieściłeś w poprzednim komentarzu (co jest błędne, jak wspomniano), czy też używasz poprawnego/ssh:abbrev|sudo:abbrev:/etc/hosts
. Twój plik konfiguracyjny ssh jest prawdopodobnie w porządku, ponieważ możesz go użyć w inny sposób.Aktualizacja : Chociaż ta odpowiedź rozwiązała pierwotny problem, została napisana dla emacsa 20 lub 21. W przypadku emacsa 24, polecam użyć odpowiedzi phils, ponieważ oferuje więcej wyjaśnień i jest aktualna.
Myślę, że nazwy plików z wieloma przeskokami w trampie są tym, czego szukasz.
Pierwszy przeskok to ssh, a drugi sudo.
Aktualizacja: Najnowsze wersje emacsa obsługują wiele przeskoków przy użyciu serwerów proxy:
Następnie wywołaj, otwierając:
źródło
Z wybraną odpowiedzią miałem trochę problemów. Jednak zadziałało, gdy dodałem tę linię do .emacs:
Następnie wykonałem następujące czynności:
/sudo:ssh-host:file-on-ssh-host
Było to trochę zagmatwane, ponieważ w pewnym momencie zostałem poproszony o podanie hasła „root”, ale wprowadzenie hasła mojego użytkownika zapewniło mi dostęp. Działa również powszechnie na wszystkich hostach w sieci. Ponadto nadal mogę to zrobić, aby nie być rootem:
/ssh:ssh-host:file-on-ssh-host
źródło
abc.xyz.com' looks like a remote host,
sudo” może używać tylko lokalnego hosta, jak tylko wpiszę drugi dwukropek w „/sudo:abc.xyz.com:”. Pomysły? Emacs 23.1.1 na Ubuntu 10.04 LTS.Ze strony internetowej konfiguracji wielu przeskoków trampa
Wtedy dowolny
otworzy plik za pomocą sudo po zalogowaniu się na tę samą nazwę użytkownika, co użytkownik z emacsem, ale na zdalnym komputerze.
źródło
Najpierw musisz ssh na serwer, a potem musisz lokalnie uruchomić emacsa.
Lub możesz użyć NFS z no_root_squash lub możesz spróbować z serwerem / klientem emacsa, chociaż nie mam pojęcia, co może się stać (nie używaj emacsa sam)
źródło