স্থানীয় ভেরিয়েবলগুলির দূরবর্তী শেলটিতে কোনও প্রভাব নেই (পার্ল: সতর্কতা: স্থানীয় অবস্থান নির্ধারণ ব্যর্থ))


89

আমার একটি নতুন উবুন্টু 12.04 ইনস্টলেশন রয়েছে। আমি যখন আমার রিমোট সার্ভারের সাথে সংযোগ করি তখন আমি এর মতো ত্রুটি পেয়েছি:

~$ ssh example.com sudo aptitude upgrade
...
Traceback (most recent call last):
  File "/usr/bin/apt-listchanges", line 33, in <module>
    from ALChacks import *
  File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
    sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_TIME = "de_DE.UTF-8",
    LC_MONETARY = "de_DE.UTF-8",
    LC_ADDRESS = "de_DE.UTF-8",
    LC_TELEPHONE = "de_DE.UTF-8",
    LC_NAME = "de_DE.UTF-8",
    LC_MEASUREMENT = "de_DE.UTF-8",
    LC_IDENTIFICATION = "de_DE.UTF-8",
    LC_NUMERIC = "de_DE.UTF-8",
    LC_PAPER = "de_DE.UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
...

আমি যখন কোনও পুরানো উবুন্টু ইনস্টলেশন থেকে সংযোগ করি তখন আমার এই সমস্যা হয় না। এটি আমার উবুন্টু থেকে 12.04 ইনস্টলেশন থেকে আউটপুট, ল্যাং এবং ভাষা সেট করা আছে

$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en_GB:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

দূরবর্তী সার্ভারগুলিতে এই ত্রুটি বার্তাটি পেতে উবুন্টুতে কি পরিবর্তন হয়েছে কেউ কি জানেন?


উত্তর:


167

এটি কারণ আপনার স্থানীয় মেশিনে আপনার স্থানীয় জার্মান সেট করা হয়েছে, যা এসএসএইচ ফরোয়ার্ড করে এবং সার্ভারে ব্যবহারের চেষ্টা করে, তবে আপনার সার্ভারটিতে এটি ইনস্টলড নেই।

আপনি বেশ কয়েকটি বিকল্প পেয়েছেন:

  • লোকেল তৈরি করুন । এর সাথে সার্ভারে জার্মান লোকাল তৈরি করুন sudo locale-gen de

  • ক্লায়েন্টের কাছ থেকে লোকেল ফরোয়ার্ড করা বন্ধ করুন । আপনার স্থানীয় মেশিন থেকে সার্ভারে স্থানীয় পরিবেশ পরিবর্তনশীলটি ফরোয়ার্ড করবেন না। আপনি স্থানীয় ফাইলটিতে SendEnv LANG LC_*লাইনটি মন্তব্য করতে পারেন । /etc/ssh/ssh_config

  • সার্ভারে লোকাল গ্রহণ বন্ধ করুন । আপনার স্থানীয় মেশিন থেকে সার্ভারে স্থানীয় পরিবেশ পরিবর্তনশীল গ্রহণ করবেন না। আপনি দূরবর্তী ফাইলে AcceptEnv LANG LC_*লাইনটি মন্তব্য করতে পারেন । /etc/ssh/sshd_config

  • সার্ভার লোকালে ইংরেজিতে সেট করুন । সার্ভারে স্পষ্টতই লোকালটি ইংরেজিতে সেট করুন। উদাহরণস্বরূপ, আপনি আপনার দূরবর্তী ~/.bashrcবা ~/.profileফাইলগুলিতে নিম্নলিখিত লাইনগুলি যুক্ত করতে পারেন :

    export LANGUAGE="en"
    export LANG="C"
    export LC_MESSAGES="C"
    

আপনার যদি সার্ভারে রুট অ্যাক্সেস না থেকে থাকে তবে ক্লায়েন্ট বিকল্প থেকে লোকাল থামানো বন্ধ করা সর্বোত্তম (এবং একমাত্র) উপায় হতে পারে।


2
Hah! আমি ক্লায়েন্টের লোকাল সেটিংস তালিকাভুক্ত করার বিষয়টি পুরোপুরি মিস করেছি ! গ্রেট জব ...
পর

10
আমি সিদ্ধান্ত নিয়েছি "ক্লায়েন্টের কাছ থেকে লোকেল ফরোয়ার্ড করা বন্ধ করুন"। ঠিকভাবে কাজ করে. ভবিষ্যতের রেফারেন্সের জন্য: আপনি স্থানীয় ~ / .ssh / কনফিগারেশনে / etc / ssh / ssh_config থেকে সেন্ডইএনভি সেটিংসকে ওভাররাইড করতে পারবেন না। দেখুন bugzilla.mindrot.org/show_bug.cgi?id=1285
Janning

3
সাথে মিলিত bugs.php.net/bug.php?id=18556 , SSH- র এর লোকেইলের পাঠানোর বাস্তব সমস্যা সৃষ্টি করতে পারে (এবং আমাকে আসলে জন্য ঘটিত) দেখুন bugzilla.mindrot.org/show_bug.cgi?id=1285#c9 .. ।
হালিল Özgür

1
আমার ক্ষেত্রে, লোকাল সেট ~/.profileকরা আমার সমস্যা সমাধান করেছে। ধন্যবাদ।
ফ্রান্সিসকো

যদি সার্ভারের জার্মান লোকেল না থাকে তবে এটির জন্য ব্যবহারকারী-অনুরোধ করা LANGঅন্য কোনও কিছুর সাথে মূল্যায়ন করা কেন এটি গ্রহণযোগ্য ? ..
মিখাইল টি।

26

এটি কখনও কখনও তাজা ন্যূনতম / বিকল্প ইনস্টল বা অন্যান্য পরিস্থিতিতে ঘটতে পারে। ফিক্সটি বেশ সহজ। নিম্নলিখিত স্থিতিতে এগুলি ব্যবহার করে দেখুন, পরিস্থিতি ঠিক আছে কি না তা দেখার জন্য প্রত্যেকের পরে পরীক্ষা করে দেখুন:

1. লোকালগুলি পুনরায় কনফিগার করুন

  • sudo dpkg-reconfigure locales
    • যদি এটি কাজ না করে,

2. স্থানীয় ভাষা-প্যাকটি পুনরায় ইনস্টল করুন

  • sudo apt-get --reinstall install language-pack-de
    • যদি এটি কাজ না করে,

৩. ম্যানুয়ালি লোকাল সেটিংস জোর করে (ক্রমাগত)

  • sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8

আমার একটি জেভিএম সমস্যা আছে এবং আমি 12.04 এও সিস্টেম লোকেল সেট করার চেষ্টা করছি। কেবল সমস্যাটি হ'ল আমি চেষ্টা করি না কেন এলসি_এলএল সেট করার মতো মনে হচ্ছে না, লোকেলগুলি এখনও এটিকে খালি হিসাবে দেখায়।
গা Star় তারা 1

15

লাইন মন্তব্য SendEnv LANG LC_*মধ্যে /etc/ssh/ssh_config, তাই এটি করা উচিত মত দেখায়:

#SendEnv LANG LC_*

10

সমস্যাটি

ডিফল্টরূপে, ssh ক্লায়েন্ট কমান্ড স্থানীয়-সম্পর্কিত পরিবেশের ভেরিয়েবলগুলি SSH সার্ভারে ফরোয়ার্ড করে। /etc/ssh/ssh_configএটি ক্লায়েন্টের পক্ষে নির্দিষ্ট করা হয়েছে :

Host *
    SendEnv LANG LC_*

এবং ডিফল্টরূপে, এসএসএইচ সার্ভার তাদের গ্রহণ করতে ঘটে ( /etc/ssh/sshd_configসার্ভারে):

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

সুতরাং, যদি আপনার শেলের মধ্যে স্থানীয়-সম্পর্কিত পরিবেশের ভেরিয়েবলগুলি থাকে তবে সেগুলি সার্ভারের পাশের এসএসএইচ সেশনে পপুলেট হবে।

দুর্ভাগ্যক্রমে, SendEnvবিকল্পটি संचयी । মতে man 5 ssh_config:

 SendEnv
         ... Multiple environment variables may be separated
         by whitespace or spread across multiple SendEnv directives.  The
         default is not to send any environment variables.

যার অর্থ এটি ওভাররাইড করা যায় না ।

সমাধান

বিশেষত সার্ভার সাইডে কখনও কখনও সিস্টেম-ব্যাপী কনফিগারেশনটি পরিবর্তন করা অসম্ভব বা বোকামিপূর্ণ। তবে আপনি এটিকে বাইপাস করতে পারেন । এবং এটি -Fssh কমান্ডের বিকল্পের পার্শ্ব প্রতিক্রিয়া । মতে man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

ডিফল্টরূপে প্রতি ব্যবহারকারী কনফিগারেশন ফাইলটি ~/.ssh/configব্যবহার করা হয় যদি তা উপস্থাপন করে। তবে আপনি এটিকে স্পষ্ট করে বাইপাস করতে কমান্ড লাইনে নির্দিষ্ট করতে পারেন /etc/ssh/ssh_config:

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

আপনি যদি কোনও কোনও নাম রাখেন তবে এটি আরও সুবিধাজনক হবে ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

এই পদ্ধতিতে, SendEnvসিস্টেম-প্রশস্ত কনফিগারেশনের ডিফল্ট নির্দেশাবলী কার্যকর হয় না, কোনও পরিবেশের ভেরিয়েবলগুলি ডিফল্টরূপে এসএসএইচ সার্ভারে প্রেরণ করা হয়।


2
মনে রাখবেন যে / ইত্যাদি / এসএসএস / কনফিগারেশনে সিস্টেম কনফিগারেশন ফাইলটিতে আপনার ব্যবহারকারী কনফিগারেশনটি ধরে রাখতে চাইলে অতিরিক্ত লাইন থাকতে পারে। এই সেটিংসটি রাখতে আপনাকে সেগুলি আপনার ব্যবহারকারী কনফিগারেশনের ফাইলগুলিতে copy / .ssh / config এ অনুলিপি করতে হবে।
স্টিভেন মাউড

4

আমারও একি দশা. আমার সমাধানটি ছিল SendEnvলাইনগুলিতে মন্তব্য করা /etc/ssh/ssh_config(যেহেতু এগুলিকে ওভাররেড করা যায় না) এবং নিম্নলিখিত এন্ট্রি এতে যুক্ত করা ~/.ssh/config:

Host *,!<somehost>
    SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    SendEnv XMODIFIERS    

<somehost>হোস্টনাম হওয়ার সাথে সাথে আমি কোনও পরিবেশের পরিবর্তনশীল প্রেরণ করতে চাইনি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.