2012-05-17 25 views
9

मैं एक सर्वर है कि /bin/sh प्रदान नहीं करता है पर SSH पर फ़ाइलों तक पहुँचने की Emacs आवारा उपयोग करने के लिए कोशिश कर रहा हूँ, और इसलिए मैं त्रुटि निम्न मिल जब मैं कनेक्ट करने का प्रयास:एक ssh सर्वर है कि प्रदान नहीं करता है/bin/श साथ Emacs आवारा ले रहे हैं?

env: can't execute '/bin/sh': No such file or directory 

वहाँ किसी भी तरह से आवारा बताने के लिए है जहां उस सर्वर के लिए दूरस्थ खोल है? ("सर्वर" एक tethered एंड्रॉइड फोन है, तो /system/bin/sh पर sh।)

उत्तर

6

भी देखें tramp-methods चर के लिए docstring। इस भाग उल्लेखनीय दिखेगी:

  • tramp-remote-shell
    यह खोल दूरस्थ होस्ट पर उपयोग करने के लिए निर्दिष्ट करता है। यह चाहिए एक बॉर्न-जैसा शेल हो। के लिए यह सामान्य रूप से आवश्यक नहीं है "/ bin/sh" के अलावा किसी भी मूल्य पर सेट करें: ट्रम्प चाहता है कि एक शेल का उपयोग करें जो टिल्डे विस्तार को ग्रोक करता है, लेकिन यह इसके लिए खोज सकता है। यह भी ध्यान रखें कि सभी यूनिक्स, पर "/ bin/sh" मौजूद है, यह उस मान के लिए सत्य नहीं हो सकता है जिसका आप उपयोग करने का निर्णय लेते हैं। आपको चेतावनी दी गई है।

संपादित करें:

तो यहाँ एक तरह से आप एक नई पद्धति से मौजूद किसी का ("एससीपीसी" इस उदाहरण में) के आधार पर बना सकते हैं, और फिर कस्टम विधि का एक अलग दूरदराज के खोल देना है :

(require 'tramp) 
(let* ((base-method (cdr (assoc "scpc" tramp-methods))) 
     (new-method (copy-tree base-method)) 
     (rshell (assq 'tramp-remote-shell new-method))) 
    (setcdr rshell "/system/bin/sh") 
    (add-to-list 'tramp-methods (cons "android" new-method))) 

ध्यान दें कि Emacs 23 (ट्रैम्प 2.1.20) में, इस संपत्ति tramp-remote-sh नामित किया गया था। Emacs 24 (ट्रैम्प 2.2.3-24.1) में यह tramp-remote-shell को बदल दिया गया है।

और मेरा अनुमान है कि है कि आप इस के साथ अपने निर्दिष्ट मेजबान के लिए डिफ़ॉल्ट रूप से इस पद्धति का उपयोग कर सकते हैं:

(add-to-list 
'tramp-default-method-alist 
(list "\\`myhost\\'" nil "android")) 
+0

ऐसा लगता है कि किसी दिए गए विधि (उदा। एसएसएच) के माध्यम से सभी एक्सेस के लिए खोल सेट करता है। क्या इस प्रति होस्ट को सेट करने का कोई तरीका है? –

+1

आप शायद एक नई विधि जोड़ना चाहते हैं जो आवश्यक ट्रम्प-रिमोट-शैल का उपयोग करता है लेकिन अन्यथा यह उस पद्धति के समान है जो आप इसे आधार दे रहे हैं, और उसके बाद होस्ट में प्रश्नों तक पहुंचने के लिए इसका उपयोग करें। – phils

+0

मेजबान विधियों को मैप करने के लिए 'ट्रम्प-डिफ़ॉल्ट-विधि-alist' चर भी देखें। – phils

-1

एसएसएच दूरस्थ उपयोगकर्ता के लॉगिन खोल का उपयोग करने की अपेक्षा करता है।

: blah: blah: user_name: blah: यदि आप सर्वर पर रूट पहुँच है, तो आप पासवर्ड फ़ाइल में प्रविष्टि को बदल सकते हैं/path/to/खोल

या बस सिमलिंक/bin/श को यह।

मुझे विश्वास नहीं है कि ग्राहक के पक्ष से इसे बदलने का कोई तरीका है, लेकिन यदि ऐसा है, तो आपको ssh, TRAMP नहीं बताना होगा। (आप एक ssh_config फ़ाइल के माध्यम से ऐसा कर सकता है।)

संपादित करें: मैं ठीक किया मानी।

+0

यह गलत है। @phils ने इसे सही ढंग से समझाया है; ट्रम्प 'ट्रम्प-रिमोट-शैल' द्वारा निर्दिष्ट खोल का उपयोग करता है। यह भी कहना गलत है कि आपको इस तरह की किसी भी चीज़ के लिए ssh_config का उपयोग करना होगा क्योंकि एसएसएच निष्पादित प्रोग्राम एसएसएच को बता सकता है कि प्रोग्राम एसएसएच कमांड लाइन पर रिमोट होस्ट पर निष्पादित करने के लिए कौन सा प्रोग्राम है। –