SSH में विदेशी वर्ण प्रदर्शित नहीं होंगे


17

मुझे उपयोग करने में sshएक समस्या है और एक दूरस्थ सर्वर (जिसकी मेरे पास व्यवस्थापक पहुँच नहीं है) - विशेष रूप से, कोरियाई और सिरिलिक पाठ के साथ वहाँ पर कुछ फ़ोल्डर हैं।

जब मैं मूल फ़ोल्डर सामग्री को प्रदर्शित करता हूं ls, तो वर्ण "?" के रूप में बच जाते हैं। शायद ध्यान दें कि कोरियाई पात्रों को लगता है कि पात्रों की संख्या की तुलना में कहीं अधिक बच निकलना चाहिए

मुझे पता है कि मैं जिस टर्मिनल प्रोग्राम का उपयोग कर रहा हूं वह पात्रों को प्रदर्शित कर सकता है, जैसा कि sftpउन्हें पूरी तरह से प्रदर्शित करता है। समस्या मेरे द्वारा किए गए सभी टर्मिनलों में होती है।

मशीनों का सारांश

स्थानीय मशीन:

  • लिनक्स 2.6.32-5-686, i686
  • डेबियन ग्नू / लिनक्स 6.0.2 (निचोड़)
  • व्यवस्थापक पहुँच है

रीमोट सर्वर:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • डेबियन जीएनयू / लिनक्स 5.0.8 (लेनी)
  • न व्यवस्थापक पहुँच है, न ही भौतिक

मैं शायद कुछ अन्य महत्वपूर्ण आंकड़ों या जानकारी से चूक गया हूं, जिस स्थिति में मैं माफी मांगता हूं। मैं कंप्यूटिंग के पूरे गैर-विंडोज पक्ष के लिए काफी नया हूं, इसलिए मैं मुश्किल से जानता हूं कि मैं यहां क्या कर रहा हूं।


2
आउटपुट localeऔर locale -aकमांड से, स्थानीय और दूरस्थ रूप से, कृपया
पोस्ट

धन्यवाद @enzotib - आपकी टिप्पणी ने मुझे इस विचार से रूबरू कराया कि प्रस्तावित स्थान स्थानीय और दूरस्थ रूप से समान नहीं हो सकते।
ChemicalRascal

जवाबों:


20

आपकी स्थानीय जानकारी सर्वर मशीन पर सही ढंग से सेट नहीं है। विशेष रूप से, LC_CTYPEचर, जो टर्मिनल पर पात्रों के एन्कोडिंग को इंगित करता है, सही तरीके से सेट नहीं है (या, मुझे संदेह है, बिल्कुल)।

अपने स्थानीय टर्मिनल में, localeअपनी स्थानीय सेटिंग देखने के लिए चलाएँ । आप शायद (अन्य लाइनों के बीच) कुछ ऐसा देखेंगे LC_CTYPE=en_US.UTF-8; यहाँ क्या मायने रखता है .UTF-8, यह UTF-8 एन्कोडिंग को दर्शाता है । यह यूनिक्स दुनिया में (और परे) बहुभाषी पाठ के लिए वास्तविक मानक एन्कोडिंग है।

आपको सर्वर को यह जानकारी पास करनी होगी। सबसे अच्छा तरीका है, अगर यह काम करता है, तो ssh कनेक्शन के माध्यम से स्थानीय जानकारी भेजना है। इसके लिए, निम्नलिखित पंक्तियों को निम्नलिखित में जोड़ें ~/.ssh/config:

Host *
SendEnv LC_* LANG

इसके लिए आवश्यक है कि AcceptEnvसर्वर विन्यास में एक उपयुक्त निर्देश मौजूद हो ( /etc/ssh/sshd_config) (यह डेबियन पर डिफ़ॉल्ट रूप से है)।

यदि वह काम नहीं करता है, और आप हमेशा यूटीएफ -8 टर्मिनल से सर्वर में लॉग इन करते हैं, तो सर्वर पर लाइन export LC_CTYPE=en_US.UTF-8को अपने ~/.bashrc( ~/.zshrcया जो भी फ़ाइल आपके शेल का उपयोग करता है) में जोड़ें। स्थानीय नाम (जैसे en_US.UTF-8) उन लोगों द्वारा प्रस्तुत किया locale -aजाना चाहिए, और .UTF-8( .utf8या कुछ तुच्छ बदलाव) होना चाहिए ।


1
आह! यह समस्या होगी: मैं स्थानीय रूप से "en_AU.utf8" का उपयोग करता हूं, जो पहले से ही सर्वर (या कम से कम, localeआउटपुट से मेल खाते हुए) को अग्रेषित किया गया लग रहा था । हालाँकि, locale -aदूरस्थ रूप से केवल en_GB.utf8 और en_US.utf8 दिया गया। धन्यवाद!
ChemicalRascal

1
वर्तमान लोकेल की एन्कोडिंग प्राप्त करने के लिए, आप इसका उपयोग भी कर सकते हैं:locale charmap

मेरी /etc/ssh/ssh_configआवश्यकता भी भेजना LANG( SendEnv LANG LC_*)
शम्मेल ली १५'१

और मुझे सर्वर साइड पर export LC_CTYPE=en_US.UTF-8मेरे साथ जोड़ने की आवश्यकता थी ~/.profile। यह जोड़ने के लिए ~/.bashrcकोई प्रभाव नहीं लग रहा था।
डेटका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.