Saya ingin membuka file di dalam Emacs yang terletak di server jauh, dengan kekuatan sudo di server. Saya dapat membuka file lokal dengan sudo melalui Tramp seperti ini:
C-x C-f /sudo::/home/user/file
Tetapi saya ingin menggunakan sudo di server:
C-x C-f /sudo::user@server/home/user/file
Tapi ini memberi saya kekuatan sudo di mesin lokal saya, ia meminta kata sandi sudo saya di mesin lokal. Apakah ada cara untuk menggunakan sudo di server?
BTW: Emacs tidak diinstal di server
Jawaban:
Mulai Emacs 24.3, analog dari
multi:
sintaks lama telah dilapisi di atastramp-default-proxies-alist
pendekatan modern , yang berarti bahwa Anda dapat sekali lagi melakukan multi-hop tanpa konfigurasi sebelumnya. Untuk detailnya, lihat:C-hig
(tramp) Ad-hoc multi-hops
RETDengan sintaks baru, setiap 'hop' dipisahkan oleh
|
. Contoh di manual adalah:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETYang menghubungkan pertama sebagai
bird@bastion
, dan dari sana keyou@remotehost:/path
/ su: atau / sudo: di host jarak jauh
Anda juga dapat menggunakan sintaks ini untuk sudo / su ke root (atau tentu saja pengguna lain) pada host jarak jauh:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETPenting : pastikan untuk menentukan nama host secara eksplisit:
sudo:remotehost:
daripadasudo::
(lihat di bawah).Karena ini masih menggunakan mekanisme proxy di bawahnya,
tramp-default-proxies-alist
sekarang harus menyertakan nilainya("remotehost" "root" "/ssh:you@remotehost:")
Artinya proxy
/ssh:you@remotehost:
akan digunakan setiap kali Anda meminta file sebagairoot@remotehost
.root
adalah pengguna default untuk metode ini, tetapi tentu saja Anda juga dapat mengubah ke pengguna non-root dengan:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETSelalu tentukan nama host jarak jauh secara eksplisit
Anda mungkin terbiasa menggunakan
sudo::
atausu::
dan menghilangkan nama host. Jika Anda tetap menggunakan localhost maka ini masih baik-baik saja, tetapi jika Anda berpindah ke server jauh maka Anda harus menentukan nama host untuk setiap hop - bahkan jika itu sama dengan hop sebelumnya. Selalu gunakansudo:hostname:
atausu:hostname:
dengan host jarak jauh.Perangkap di sini adalah yang benar
sudo::
- benar tampak berfungsi - namun ketika Anda melakukannya, HOST untuk entri proxy dinamis adalah nama host tempat Anda berasal, bukan host tempat Anda terhubung. Ini tidak hanya akan terlihat membingungkan (karena host yang salah akan ditampilkan di jalur file), tetapi ini juga berarti bahwa setiap upaya berikutnya untuk digunakansudo::
di localhost Anda akan di-proxy-kan ke server jarak jauh! (dan proxy juga mungkin akan terhalang jika Anda melakukan hal yang sama di server kedua, menyebabkan masalah lebih lanjut).Singkatnya, jangan gunakan
::
saat Anda melakukan multi-hop!sumber
/sudo:hostname:/etc/hosts
, saya mendapatkan apa yang Anda harapkan, tetapi ketika saya mengetik/sudo:abbrev:/etc/hosts
, saya mendapatkan pesan "Singkatan host terlihat seperti host jarak jauh, sudo hanya dapat menggunakan host lokal". Apakah ini bisa diperbaiki?.ssh/config
entri, dan saya tidak memiliki masalah dalam menggunakan/ssh:abbrev|sudo:abbrev:/etc/hosts
singkatan nama host saya. Sepertinya Anda tidak beralih ke host terlebih dahulu.tramp-default-proxies-alist
tampaknya benar. Namun perilaku yang saya jelaskan di atas tetap ada. Apakah file konfigurasi saya salah?/sudo:abbrev:/etc/hosts
seperti yang Anda masukkan dalam komentar sebelumnya (yang salah, seperti yang disebutkan), atau apakah Anda menggunakan yang benar/ssh:abbrev|sudo:abbrev:/etc/hosts
. File konfigurasi ssh Anda mungkin baik-baik saja, karena Anda terbukti dapat menggunakannya sebaliknya.Pembaruan : Meskipun jawaban ini memecahkan masalah aslinya, namun jawaban ini ditulis untuk emacs 20 atau 21. Untuk emacs 24, saya sarankan Anda menggunakan jawaban phils karena memberikan penjelasan lebih lanjut dan up to date.
Saya pikir nama file multi-hop di gelandangan adalah apa yang Anda cari.
Lompatan pertama akan menjadi ssh dan yang kedua adalah sudo.
Pembaruan: Versi terbaru dari emacs mendukung banyak lompatan menggunakan proxy:
Kemudian panggil dengan membuka:
sumber
Saya mengalami masalah dengan jawaban yang dipilih. Namun, itu berhasil ketika saya menambahkan baris ini ke .emacs:
Dan kemudian jalankan yang berikut ini:
/sudo:ssh-host:file-on-ssh-host
Agak membingungkan karena pada satu titik saya diminta memasukkan kata sandi "root", tetapi memasukkan kata sandi pengguna memberi saya akses. Ini juga bekerja secara universal pada semua host di jaringan. Juga, saya masih bisa melakukan ini agar tidak menjadi root:
/ssh:ssh-host:file-on-ssh-host
sumber
abc.xyz.com' looks like a remote host,
sudo 'hanya dapat menggunakan host lokal" segera setelah saya memasukkan titik dua di "/sudo:abc.xyz.com:". Ide ide? Emacs 23.1.1 di Ubuntu 10.04 LTS.Dari halaman web konfigurasi multi-hop gelandangan
Lalu apapun
akan membuka file menggunakan sudo setelah masuk dengan nama pengguna yang sama dari pengguna yang menjalankan emacs tetapi pada mesin jarak jauh.
sumber
Anda harus ssh ke server terlebih dahulu, kemudian Anda harus menjalankan emacs secara lokal.
Atau Anda dapat menggunakan NFS dengan no_root_squash, atau Anda dapat mencoba dengan server / klien emacs, meskipun saya tidak tahu apa yang mungkin terjadi (jangan gunakan emacs sendiri)
sumber