Emacs ile SSH ve Sudo üzerinden dosya açın


114

Uzak bir sunucuda bulunan Emacs içinde, sunucuda sudo güçleri olan bir dosya açmak istiyorum. Yerel dosyaları sudo ile Tramp üzerinden şu şekilde açabilirim:

C-x C-f /sudo::/home/user/file

Ama sunucuda sudo kullanmak istiyorum:

C-x C-f /sudo::user@server/home/user/file

Ama bu bana yerel makinemde sudo güçleri veriyor, yerel makinede sudo parolamı soruyor. Sunucuda sudo kullanmanın bir yolu var mı?

BTW: Emacs sunucuda kurulu değil


doğrudan sunucuda root olarak komut veremez misiniz?
Chmouel Boudjnah

2
Sudo ayrıcalıklarına sahip bir kullanıcım var, ancak kök parolam yok.
Fernando Briano

Yanıtlar:


186

Emacs 24.3'ten itibaren, eski multi:sözdiziminin bir analogu modern tramp-default-proxies-alistyaklaşımın üzerine yerleştirilmiştir, yani önceden herhangi bir yapılandırma olmadan çoklu atlamaları tekrar gerçekleştirebilirsiniz. Ayrıntılar için bkz .:

C-hig (tramp) Ad-hoc multi-hops RET

Yeni sözdizimi ile her bir 'atlama' ile ayrılır |. Kılavuzdaki örnek:

C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path RET

İlk olarak bird@bastionve oradan oraya bağlananyou@remotehost:/path

/ su: veya / sudo: uzak ana bilgisayarlarda

Bu sözdizimini uzaktaki bir ana bilgisayarda sudo / su'dan root'a (veya tabii ki herhangi bir başka kullanıcıya) kullanmak için de kullanabilirsiniz:

C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

Önemli : ana bilgisayar adını (aşağıya bakın) sudo:remotehost:yerine açıkça: belirttiğinizden emin olun sudo::.

Bu hala altındaki proxy mekanizmasını kullandığından, tramp-default-proxies-alistşimdi değeri içermelidir("remotehost" "root" "/ssh:you@remotehost:")

Bunun anlamı, /ssh:you@remotehost:bir dosyayı her talep ettiğinizde proxy kullanılacaktır root@remotehost.

root bu yöntemler için varsayılan kullanıcıdır, ancak elbette aşağıdakilerle root olmayan bir kullanıcıya da geçiş yapabilirsiniz:

C-xC-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

Her zaman uzak ana bilgisayar adını açıkça belirtin

Muhtemelen ana bilgisayar adını kullanmaya sudo::veya su::atlamaya alışkınsınız. Eğer varsa kalan localhost üzerinde o zaman bu ince hala, ancak uzak sunucuya atlamalı eğer o zaman gerekir her atlama için hostname belirtmek - önceki hop aynıdır bile. Her zaman sudo:hostname:veya su:hostname:uzak ana bilgisayarlarla kullanın .

Burada tuzak olduğunu sudo:: mu aslında işin görünen - ancak dinamik vekil giriş için HOST makina adı olacak bunu yaparken kökenli , bağlı ana bilgisayardan ziyade dan. Bu sadece kafa karıştırıcı görünmekle kalmayacak (çünkü dosya yollarında yanlış ana bilgisayar görüntülenecek), aynı zamanda sudo::yerel ana makinenizde daha sonraki herhangi bir girişimin uzak sunucuya vekil olarak gönderileceği anlamına da gelecektir ! (ve aynı şeyi ikinci bir sunucuda yaptıysanız ve başka sorunlara yol açarsanız, proxy de muhtemelen bozulurdu).

Kısacası, ::multi-hop yaptığınızda kullanmayın !


4
ve şimdi wikemacs'e de wikemacs.org/index.php/TRAMP eklendi . Teşekkürler phils, harika çalışıyor.
Ehvince

1
Bu yanıtı yeni buldum ve harika çalışıyor ... bir .ssh / config dosyasında tanımlanmış ana bilgisayar adı kısayoluna sahip olmam dışında. Yazdığımda /sudo:hostname:/etc/hosts, beklediğiniz şeyi alıyorum, ancak yazdığımda /sudo:abbrev:/etc/hosts"Ana bilgisayar kısaltması uzak bir ana bilgisayar gibi görünüyor, sudo yalnızca yerel ana bilgisayarı kullanabilir" mesajını alıyorum. Bu düzeltilebilir mi?
rogerl

2
rogerl: Benim de .ssh/configgirdilerim var ve /ssh:abbrev|sudo:abbrev:/etc/hostsana bilgisayar adı kısaltmalarımı kullanırken herhangi bir sorun yaşamıyorum . Görünüşe göre önce ev sahibine gitmiyorsun.
phils

@phils Belki de bunu yeni bir soru olarak göndermeliyim. Ancak: benim yapılandırma dosyam Host r User rlipsett Hostname odlinux IdentityFile ~ / .ssh / id-rsa.pub tramp-default-proxies-alistgibi görünüyor ve my doğru görünüyor. Yine de yukarıda anlattığım davranış devam ediyor. Yapılandırma dosyam bir şekilde yanlış mı?
rogerl

Bu ister hala bana net değil aslında kullanmaya çalışıyorum /sudo:abbrev:/etc/hostsDoğru kullanıyorsanız (belirtildiği gibi, yanlış olan) daha önceki yorumunda ifade ettiği gibi, ya da /ssh:abbrev|sudo:abbrev:/etc/hosts. Başka türlü kullanabileceğiniz için ssh yapılandırma dosyanız muhtemelen iyidir.
phils

21

Güncelleme : Bu cevap orijinal problemi çözmüş olsa da emacs 20 veya 21 için yazılmıştır. Emacs 24 için phils'in cevabını kullanmanızı tavsiye ederim çünkü daha fazla açıklama sunar ve günceldir.


Bence tramp'taki multi-hop dosya adları aradığınız şey.

İlk atlama ssh ve ikincisi sudo olacaktır.


Güncelleme: emacs'nin son sürümleri, proxy kullanan birden çok atlamayı destekler:

(add-to-list 'tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))

Sonra açarak çağırın:

/sudo:my-sudo-alias:file-on-ssh-host

Çözüm gibi görünüyor, ancak şunu anlıyorum: "çoklu yöntem artık desteklenmiyor" Beni güncellenmiş bir kılavuza yönlendirebilir misiniz?
Fernando Briano

Mx info, Cs tramp :) Sudo'nuzun hedefi olarak sahte bir ana bilgisayar tanımlamanız ve onu tramp-default-proxy-alist'e eklemeniz gerekebilir.
Dave Bacher

2
Yapılandırmamda çalıştırmayı başaramadım (hata 255?), Ancak .emacs'deki şu satır çalışıyor: (set-default 'tramp-default-proxies-alist (quote (("my-sudo-alias" nil " / ssh: user @ ssh-host: ")))
ang mo

Güncellenen yanıt "en son" tanımlamaz, geçersiz elisp içerir ve onu düzeltseniz bile çalışmaz. Güncellenen cevaptan bir yıl sonra yayınlanan kararlı bir emac sürümündeyim.
Michael Wolf

1
Gerçek 2014 / 24,3 itibariyle cevabı "ad-hoc çoklu şerbetçiotu" seçeneğini kullanarak, şu cevabı
TomRoche

7

Seçilen cevapla ilgili bazı sorunlar yaşadım. Ancak, bu satırı .emacs'e eklediğimde işe yaradı:

(add-to-list 'tramp-default-proxies-alist '(".*" "\\`root\\'" "/ssh:%h:"))

Ve sonra aşağıdakileri gerçekleştirdi:

/sudo:ssh-host:file-on-ssh-host

Biraz kafa karıştırıcıydı çünkü bir noktada benden "root" parolası istenmişti, ancak kullanıcı parolamı girmeme erişim sağladı. Aynı zamanda evrensel olarak ağdaki tüm ana bilgisayarlarda çalışır. Ayrıca, bunu root olmamak için hala yapabilirim:

/ssh:ssh-host:file-on-ssh-host


3
Bu benim için çalışmıyordu. Görünüşe göre Ubuntu'da, en azından Emacs'ın 23.2.1 sürümünde ve tramp'ın 2.1.18-23.2 sürümünde bu işe yaramıyor. Yine de bu işe yarıyor: info.solomonson.com/content/…
gaizka

(set-default 'tramp-default-proxies-alist (quote ((". *" "\" root \\ "" / ssh:% h: "))))
gaizka

1
Yukarıdaki çözümlerden hiçbirinin çalışmasını sağlayamıyorum (listeye ekle veya varsayılan olarak ayarla). Birincisi Emacs'ın başlangıçta boğulmasına neden oluyor abc.xyz.com' looks like a remote host, ve ikincisi, "/sudo:abc.xyz.com:" da ikinci iki nokta üst üste girer girmez bana "Ana bilgisayar sudo 'yalnızca yerel ana bilgisayarı kullanabilir" diyor. Fikirler? Ubuntu 10.04 LTS üzerinde Emacs 23.1.1.
SabreWolfy

3

Gönderen serseri çoklu atlamalar yapılandırma web sayfası

 (add-to-list 'tramp-default-proxies-alist
                   '(nil "\\`root\\'" "/ssh:%h:"))
      (add-to-list 'tramp-default-proxies-alist
                   '((regexp-quote (system-name)) nil nil))

Sonra herhangi biri

C-x C-f /sudo:remote-host:/file

uzak makinede emacs çalıştıran kullanıcının aynı kullanıcı adıyla oturum açtıktan sonra sudo kullanarak dosyayı açacaktır .


-12

Önce sunucuya ssh yapmalısınız, ardından yerel olarak emacs çalıştırmalısınız.

Ya da no_root_squash ile NFS kullanabilir ya da ne olabileceği hakkında hiçbir fikrim olmasa da emacs sunucusu / istemcisi ile deneyebilirsiniz (emac'leri kendim kullanmayın)


Denedim, ancak normal kullanıcı olarak bağlarken sshfs ile dosyalara root olarak erişemiyorum. Sanırım bu bir kurulum problemi.
Dan Andreatta

Hassan'ın da belirttiği gibi no_root_squash dikkatli kullanılmalıdır.
Dan Andreatta

6
-1 soruyu cevaplamadığı için. SSH yerine NFS önermek için -1. No_root_squash önermek için -1. -1, uzak bir iletişim sorunu için genellikle Unix etki alanı soketlerini kullanan Emacs istemcisini önermek için. Kullanmadan Emacs hakkında endişelenmek için -1.
2016
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.