Emacs के साथ SSH और सूडो के माध्यम से फ़ाइल खोलें


114

मैं Emacs के अंदर एक फ़ाइल खोलना चाहता हूं जो कि सर्वर पर sudo शक्तियों के साथ एक दूरस्थ सर्वर पर स्थित है। मैं इस तरह से Tramp के माध्यम से sudo के साथ स्थानीय फ़ाइलें खोल सकता हूं:

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

लेकिन मैं सर्वर पर sudo का उपयोग करना चाहता हूं:

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

लेकिन यह मुझे मेरे स्थानीय मशीन पर sudo शक्तियां देता है, यह स्थानीय मशीन पर मेरे sudo पासवर्ड के लिए पूछता है। क्या सर्वर पर sudo का उपयोग करने का कोई तरीका है?

BTW: Emacs सर्वर पर स्थापित नहीं है


क्या आप सर्वर पर सीधे रूट के रूप में कमांड नहीं कर सकते?
छमौल बोदजनाह

2
मेरे पास sudo विशेषाधिकार के साथ एक उपयोगकर्ता है, लेकिन रूट पासवर्ड नहीं है।
फर्नांडो Briano

जवाबों:


186

Emacs 24.3 के अनुसार, पुराने multi:सिंटैक्स के एक एनालॉग को आधुनिक tramp-default-proxies-alistदृष्टिकोण के शीर्ष पर स्तरित किया गया है , जिसका अर्थ है कि आप एक बार फिर बिना किसी पूर्व विन्यास के मल्टी-हॉप कर सकते हैं। जानकारी के लिए, देखें:

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

नए सिंटैक्स के साथ, प्रत्येक 'हॉप' द्वारा अलग किया जाता है |। मैनुअल में उदाहरण है:

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

जो सबसे पहले bird@bastion, और वहां से जोड़ता हैyou@remotehost:/path

/ su: या / sudo: दूरस्थ होस्ट पर

आप इस सिंटैक्स का उपयोग रिमोट होस्ट पर sudo / su to root (या निश्चित रूप से किसी अन्य उपयोगकर्ता) के लिए कर सकते हैं:

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

महत्वपूर्ण : स्पष्ट रूप से होस्टनाम निर्दिष्ट करना सुनिश्चित करें: sudo:remotehost:बजाय sudo::(नीचे देखें)।

के रूप में यह अभी भी नीचे छद्म तंत्र का उपयोग करता है, tramp-default-proxies-alistअब मूल्य शामिल होना चाहिए("remotehost" "root" "/ssh:you@remotehost:")

/ssh:you@remotehost:जब भी आप फ़ाइल के रूप में अनुरोध करते हैं तो प्रॉक्सी का उपयोग किया जा सकता है root@remotehost

root इन विधियों के लिए डिफ़ॉल्ट उपयोगकर्ता है, लेकिन आप निश्चित रूप से इसके साथ एक गैर-रूट उपयोगकर्ता में भी बदल सकते हैं:

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

हमेशा दूरस्थ होस्टनाम स्पष्ट रूप से निर्दिष्ट करें

आप शायद hostname का उपयोग कर रहे हैं sudo::या su::छोड़ रहे हैं। यदि आप लोकलहोस्ट पर रह रहे हैं तो यह अभी भी ठीक है, लेकिन अगर आप किसी दूरस्थ सर्वर पर जा रहे हैं, तो आपको प्रत्येक हॉप के लिए होस्टनाम निर्दिष्ट करना होगा - भले ही वह पिछले हॉप के लिए समान हो। हमेशा दूरदराज के मेजबानों के साथ sudo:hostname:या उपयोग करें su:hostname:

जाल है कि यहाँ है sudo:: करता है वास्तव में काम करने के लिए दिखाई देते हैं - लेकिन जब आप उस गतिशील प्रॉक्सी प्रवेश के लिए होस्ट होस्ट नाम आप हो जाएगा करना शुरु हुआ मेजबान आप से जुड़ा बजाय से। यह न केवल भ्रामक लगेगा (जैसा कि गलत होस्ट फ़ाइल पथों में प्रदर्शित किया जाएगा), लेकिन इसका मतलब यह भी होगा कि sudo::आपके लोकलहोस्ट पर उपयोग करने के बाद के किसी भी प्रयास के बजाय दूरस्थ सर्वर पर प्रॉक्सी किया जाएगा! (और अगर आप एक दूसरे सर्वर पर एक ही काम किया, तो आगे के मुद्दों के कारण) प्रॉक्सी को संभवतः माना जाएगा।

संक्षेप में, ::जब आप बहु-हॉप का उपयोग न करें !


4
और अब wikemacs के साथ ही wikemacs.org/index.php/TRAMP को जोड़ा गया । धन्यवाद phils, यह महान काम करता है।
एह्विसन जूल

1
मुझे यह उत्तर मिला, और यह बहुत अच्छा काम करता है ... सिवाय इसके कि मेरे पास होस्टनाम शॉर्टहैंड को एक .ssh / config फाइल में परिभाषित किया गया है। जब मैं टाइप करता हूं /sudo:hostname:/etc/hosts, तो मुझे वह मिलता है, /sudo:abbrev:/etc/hostsजिसकी आप अपेक्षा करते हैं, लेकिन जब मैं टाइप करता हूं , तो मुझे संदेश मिलता है "होस्ट एब्सर्वव एक दूरस्थ होस्ट की तरह दिखता है, सुडो केवल स्थानीय होस्ट का उपयोग कर सकता है"। क्या यह ठीक है?
रोजरेल

2
rogerl: मेरे पास भी .ssh/configप्रविष्टियाँ हैं, और मुझे /ssh:abbrev|sudo:abbrev:/etc/hostsमेरे hostname संक्षिप्त रूपों का उपयोग करने में कोई समस्या नहीं है । ऐसा लगता है कि आप पहले मेजबान के लिए hopping नहीं हैं।
फिल्स

@ एफिल्स शायद मुझे इसे एक नए प्रश्न के रूप में पोस्ट करना चाहिए। हालाँकि: मेरी कॉन्फ़िग फ़ाइल होस्ट r उपयोगकर्ता rlipsett होस्टनाम odlinux IdentityFile ~ / .ssh / id-rsa.pub जैसी दिखती है और मेरा tramp-default-proxies-alistसही प्रतीत होता है। फिर भी मैंने ऊपर वर्णित व्यवहार जारी रखा। क्या मेरी कॉन्फ़िग फ़ाइल किसी तरह गलत है?
रोजरेल

यह अभी भी मेरे लिए स्पष्ट नहीं है कि क्या आप वास्तव में उपयोग करने की कोशिश कर रहे हैं जैसा कि आप /sudo:abbrev:/etc/hostsअपनी पिछली टिप्पणी में डालते हैं (जो कि गलत है, जैसा कि उल्लेख किया गया है), या यदि आप सही उपयोग कर रहे हैं/ssh:abbrev|sudo:abbrev:/etc/hosts । आपकी ssh कॉन्फ़िग फ़ाइल संभवतः ठीक है, क्योंकि आप इसे अन्यथा उपयोग कर सकते हैं।
फिल्स

21

अद्यतन : हालांकि इस उत्तर ने मूल समस्या को हल कर दिया है, यह emacs 20 या 21 के लिए लिखा गया था। Emacs 24 के लिए, मैं आपको सलाह देता हूं कि आप phils के उत्तर का उपयोग करें क्योंकि यह अधिक स्पष्टीकरण प्रदान करता है और अद्यतित है।


मुझे लगता है कि ट्रम्प में मल्टी-हॉप फाइलनेम वह है जो आप देख रहे हैं।

पहला हॉप ssh होगा और दूसरा सुडोल होगा।


अद्यतन: हाल के संस्करण प्रॉक्सिस का उपयोग करके कई हॉप्स का समर्थन करते हैं:

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

फिर खोलकर आह्वान करें:

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

यह समाधान की तरह लगता है, लेकिन मुझे लगता है: "बहु विधि अब समर्थित नहीं है" क्या आप मुझे एक अद्यतन मैनुअल की ओर इशारा कर सकते हैं?
फर्नांडो Briano

Mx जानकारी, Cs tramp :) आपको अपने sudo के लक्ष्य के रूप में एक नकली होस्ट को परिभाषित करने और इसे tramp-default -xy-alist में जोड़ने की आवश्यकता हो सकती है।
डेव बाकर

2
मैं इसे अपने कॉन्फ़िगरेशन में नहीं चला पा रहा था (त्रुटि 255?), लेकिन .emacs में निम्न पंक्ति काम करती है: (सेट-डिफॉल्ट 'ट्रैंप-डिफॉल्ट-प्रॉक्सि-अलिस्ट (उद्धरण ("मेरा-सूडो-उर्फ" nil) / ssh: user @ ssh-host: "))))
ang mo

अपडेट किया गया उत्तर "हाल के" को परिभाषित नहीं करता है, इसमें अवैध रूप से स्पष्ट है, और जब आप इसे सही करते हैं तब भी काम नहीं करता है। मैं अद्यतित उत्तर के बाद एक वर्ष में जारी emacs के एक स्थिर संस्करण पर हूं।
माइकल वुल्फ

1
असली 2014 / 24.3 के रूप में जवाब है, निम्नलिखित जवाब है का उपयोग करते हुए "तदर्थ बहु हॉप्स"
TomRoche

7

चयनित उत्तर से मुझे कुछ परेशानी हुई। हालाँकि, जब मैंने इस लाइन को .emacs में जोड़ा तो यह काम किया:

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

और फिर निम्नलिखित निष्पादित किया गया:

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

यह थोड़ा भ्रामक था क्योंकि एक बिंदु पर मुझे "रूट" पासवर्ड के लिए कहा गया था, लेकिन मेरे उपयोगकर्ता के पासवर्ड दर्ज करने से मुझे एक्सेस की अनुमति मिली। यह सार्वभौमिक रूप से नेटवर्क पर सभी मेजबानों पर भी काम करता है। इसके अलावा, मैं अभी भी रूट नहीं होने के लिए ऐसा कर सकता हूं:

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


3
यह मेरे लिए काम नहीं कर रहा था। ऐसा लगता है कि उबंटू में, कम से कम 23.2.1 Emacs के संस्करण के साथ और 2.1.18-23.2 के tramp संस्करण के साथ यह काम नहीं करता है। यह काम करता है, हालांकि: info.solomonson.com/content/…
gaizka

(सेट-डिफॉल्ट 'ट्रम्प-डिफॉल्ट-प्रॉक्सिस-एलिस्ट (भाव। ("। *" "\
_ \ _

1
मैं काम करने के लिए ऊपर दिए गए समाधानों (ऐड-टू-लिस्ट या सेट-डिफॉल्ट) में से किसी को भी प्राप्त करने में सक्षम नहीं हूं। पहला कारण Emacs को स्टार्टअप पर झपटना है और दूसरा मुझे "होस्ट abc.xyz.com' looks like a remote host, सुडो" केवल स्थानीय होस्ट का उपयोग कर सकता है "जैसे ही मैं दूसरे कॉलोन में" /sudo:abc.xyz.com: "दर्ज करता हूं। विचार? Ubuntu 10.04 LTS पर 23.1.1 ईमेक्स।
सब्रे वूल्फी

3

से आवारा बहु हॉप्स विन्यास वेबपेज

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

फिर कोई भी

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

उपयोगकर्ता के एक ही उपयोगकर्ता नाम के साथ लॉग इन करने के बाद sudo का उपयोग करके फ़ाइल खोलेंगे, लेकिन रिमोट मशीन पर।


-12

आपको पहले सर्वर में ssh करना होगा, फिर आपको स्थानीय स्तर पर emacs चलाना होगा।

या आप NFS का उपयोग no_root_squash के साथ कर सकते हैं, या आप emacs सर्वर / क्लाइंट के साथ प्रयास कर सकते हैं, हालांकि मुझे कुछ भी पता नहीं है कि क्या हो सकता है (स्वयं emacs का उपयोग न करें)


मैंने कोशिश की, लेकिन मैं फ़ाइलों को रूट के रूप में एक्सेस नहीं कर सकता, जब इसे नियमित उपयोगकर्ता के रूप में बढ़ते हुए। मुझे लगता है कि यह एक सेटअप समस्या है।
दान एंड्रीटा

जैसा कि हसन ने कहा, no_root_squash का उपयोग देखभाल के साथ किया जाना चाहिए।
दान एंड्रीटा

6
-1 सवाल का जवाब नहीं देने के लिए। -1 SSH के बजाय NFS सुझाने के लिए। -1 को no_root_squash सुझाने के लिए। -1, Emacs क्लाइंट को सुझाव देने के लिए, जो कि दूरस्थ संचार समस्या के लिए आमतौर पर Unix डोमेन सॉकेट्स का उपयोग करता है। -1 का उपयोग किए बिना Emacs के बारे में ब्लिथरिंग के लिए।
10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.