এসএসএইচ ক্লায়েন্টকে সার্ভারে TERM এনভায়রনমেন্ট ভেরিয়েবল পাস করা আটকাবেন?


21

আমি বর্তমানে ফেডোরা 18 জিনোম-টার্মিনাল ব্যবহার করছি , তারপরে tmuxএটিতে মাল্টিপ্লেক্সার শুরু করা হয়েছে। কমান্ডের মাধ্যমে আমি একটি সেন্টোস 5 সার্ভারের সাথে সংযুক্ত হওয়ার পরে ssh, আমি দেখতে পেলাম:

  • ls ফলাফলের কোনও রঙ নেই
  • tmux, screen, hexedit, htopসব মত ত্রুটি বার্তা দিয়ে শুরু করতে ব্যর্থ হয়েছে:
    ওপেন টার্মিনাল ব্যর্থ হয়েছে: অনুপস্থিত বা অনুপযুক্ত টার্মিনাল: স্ক্রীন-256 রঙ

দেখে মনে হচ্ছে যে sshসার্ভারে $ TERM এনভায়রনমেন্ট ভেরিয়েবলটি পাস হয়েছে তবে আমি এটি /etc/ssh/ssh_configফেডোরা 18-র ফাইলে খুঁজে পাচ্ছি না ।

যদিও আমি ম্যানুয়ালি সার্ভারে $ TERM ভেরিয়েবলটি পরিবর্তন করতে পারি, যতবার আমি সংযোগ করি, এটি আবার ঘটে। তাহলে কীভাবে এটি প্রতিরোধ করবেন?

উত্তর:


18

$TERM তারা কোন টার্মিনালটির সাথে কথা বলছে তা অ্যাপ্লিকেশনগুলিকে জানানো যাতে তারা এটির সাথে কীভাবে কথা বলতে হয় তা জানে।

এটি রিমোট হোস্ট দ্বারা সমর্থিত একটি মানে পরিবর্তন করুন এবং এটি আপনার টার্মিনালের সাথে যথাসম্ভব ঘনিষ্ঠভাবে মেলে ( screen)।

বেশিরভাগ লিনাক্স সিস্টেমে কমপক্ষে একটি screenটার্মিনফো প্রবেশ করা উচিত। যদি তা না হয় তবে এটি screenএকটি সুপারসেট প্রয়োগ করে vt100এবং vt100সর্বজনীন। তাই:

TERM=screen ssh host

অথবা

TERM=vt100 ssh host

যদি আপনার 256 রঙের সমর্থন প্রয়োজন হয় তবে আপনি চেষ্টা করতে পারেন xterm-256colorযা যথেষ্ট পরিমাণে হওয়া উচিত ( screen256 রঙ একইভাবে সমর্থন xtermকরে) এবং অ্যাপ্লিকেশনগুলিকে বলুন যে আপনার টার্মিনাল অ্যাপ্লিকেশন 256 রঙ সমর্থন করে এবং কীভাবে এটি ব্যবহার করবেন তা তাদের বলুন।

অথবা আপনি দূরবর্তী হোস্টে টার্মিনো এন্ট্রি ইনস্টল করতে পারেন।

infocmp -x | ssh -t root@remote-host '
  cat > "$TERM.info" && tic -x "$TERM.info"'

2
জেনে রাখা ভাল infocmpএবং ticএকবার সংকলিত হয়ে গেলে অস্থায়ীভাবে $TERMআবার পরিবর্তন করার দরকার নেই । উপায় দ্বারা, আমি স্রেফ /usr/share/terminfo/s/screen-256colorফেডোরা 18 থেকে CentOS-তে অনুলিপি করেছি (RSSync) , মনে হয় এটি ঠিক আছে ( rsync -tv /usr/share/terminfo/s/screen-256color root@the_host:/usr/share/terminfo/s)।
লিউইয়ান 研 研

উল্লেখ করতে ভুলে গেছি, আমি tmuxফেডোরা 18 এর জিনোম-টার্মিনালে দৌড়েছি , মান থেকে tmuxপরিবর্তিত $TERMহয়েছি । screen-256colorxterm-256color
লিউইয়ান 刘 研

বিটিডাব্লু, এসএসএস কি এইভাবে কাজ করতে পারে: কোন হোস্ট / সার্ভার সমর্থিত টার্মিনোফোন পান (এর মধ্যে ধাক্কা দেওয়া হয় না), তারপরে ক্লায়েন্ট টার্মিনাল সমর্থন করতে পারে এমন একটি পিকআপ গ্রহণ করবে?
লিউইয়ান 研 研

2
infocmp | ssh -t root@remote-host 'cat > "$TERM.info" && tic "$TERM.info"'সংক্ষিপ্ত করা যেতে পারে infocmp | ssh root@remote-host "tic -"। এটি কাজ করে কারণ আপনার যখন পাইপ থাকে তখন এটি ব্যবহার করে ফাইল হিসাবে অ্যাক্সেস করা যায় - এবং ভাগ্যক্রমে পাইপগুলি এসএসএইচ জুড়ে কাজ করে।
অ্যালান জেনকিনস

1
@ স্টারফ্রাই, আমি আপনাকে কোনও গ্যারান্টি দিতে পারি না যে tic(টার্মিনফো সংকলক) উত্পাদিত ফাইলগুলির বাইনারি ফর্ম্যাটটি একটি সিস্টেম থেকে পরের সিস্টেমে একই হবে বা তাদের অবস্থান একই হবে। ticঅনুমতিগুলি সঠিক কিনা তা নিশ্চিত করতে পারে বা প্রয়োজনীয় যেখানে মধ্যস্থ ডিরেক্টরি তৈরি করতে পারে।
স্টাফেন চেজেলাস

10

আমার ক্ষেত্রে আমি কেবলমাত্র আমার স্থানীয় ডেস্কটপে আমার .zshrc( .bashrcবাশ ব্যবহার করে) একটি উপনাম যুক্ত করেছি:

alias ssh='TERM=xterm ssh'

যদি আপনি ইতিমধ্যে কোনও উপনাম ব্যবহার করেন তবে পরিবেশের অ্যাসাইনমেন্টটি অন্তর্ভুক্ত করার জন্য এটি সামঞ্জস্য করুন।


1

আমি এটি আমার .bashrcদূরবর্তী হোস্টে রেখেছি :

# 256-color mode not supported on this host
if echo $TERM | grep -q -- '-256color'; then
    echo -e '\n\n256-color mode not supported on this host.  Reverting TERM...\n'
    export TERM=`echo -n $TERM | sed 's/-256color//'`
fi

এইভাবে, উভয় xterm-256colorএবং screen-265colorসঠিকভাবে পরিচালনা করা হয়। এছাড়াও, আমি এটিকে নোটটি আউটপুট দিয়েছি যাতে সার্ভারটি পরে আপগ্রেড হয় এবং 256 টি রঙ সমর্থন করে, আমি এসএসএইচিংয়ের সাথে আমার টিআরএম ভেরিয়েবলটি কেন পরিবর্তিত হবে তা ভেবে আমার প্রাচীরের বিরুদ্ধে মাথা ঠোঁটানো শেষ হবে না।


অথবা, export TERM=${TERM%%-256color}
সাবসেল

1

পরিবর্তনগুলি কার্যকর $TERMহতে পারে, তবে আমি এটির পরামর্শ দিচ্ছি না, এটি সমাধানের পরিবর্তে কেবলমাত্র কর্মচঞ্চল।

আমার সিস্টেমে যখন আমি এই সমস্যার মুখোমুখি হই তখন দূরবর্তী সিস্টেমে সর্বাধিক সাধারণ টার্মিনাল ধরণের জন্য সমর্থন ইনস্টল করে আমি এটি সংশোধন করি:

  • yum install ncurses-baseজন্য screen-256colorসেন্টওএস উপর
  • yum install ncurses-termজন্য screen-256color-bceসেন্টওএস উপর
  • apt install ncurses-baseউভয়ের জন্য screen-256colorএবং screen-256color-bceডেবিয়ান, উবুন্টু এবং পুদিনায়

Ncurses- সংক্রান্ত প্যাকেজগুলি অন্যান্য অনেক টার্মিনালের জন্য সমর্থন সরবরাহ করে এবং এগুলি অন্যান্য সমস্ত বড় বিতরণেও উপলব্ধ। (তবে আমার ব্যবহারের ক্ষেত্রে এবং আপনার প্রশ্নের জন্য এটি যথেষ্ট তথ্য হওয়া উচিত)


0

মানুষ ssh_config দেখুন:

 SendEnv
         Specifies what variables from the local environ(7) should be sent
         to the server.  Note that environment passing is only supported
         for protocol 2.  The server must also support it, and the server
         must be configured to accept these environment variables.  Refer
         to AcceptEnv in sshd_config(5) for how to configure the server.
         Variables are specified by name, which may contain wildcard char‐
         acters.  Multiple environment variables may be separated by
         whitespace or spread across multiple SendEnv directives. The
         default is not to send any environment variables.

এবং মানুষ sshd_config:

 AcceptEnv
         Specifies what environment variables sent by the client will be
         copied into the session's environ(7).  See SendEnv in
         ssh_config(5) for how to configure the client.  Note that envi-
         ronment passing is only supported for protocol 2.  Variables are
         specified by name, which may contain the wildcard characters `*'
         and `?'.  Multiple environment variables may be separated by
         whitespace or spread across multiple AcceptEnv directives.  Be
         warned that some environment variables could be used to bypass
         restricted user environments.  For this reason, care should be
         taken in the use of this directive.  The default is not to accept
         any environment variables.

সেই অনুসারে, ডিফল্টটি কোনও ভেরিয়েবল প্রেরণ করা উচিত নয়, তবে টিআরএম বিশেষ বলে মনে হচ্ছে। এটি যাইহোক প্রেরণ করা হয়।

সুতরাং আপনি হয় ssh কল করার সময় TERM পরিবর্তন করতে (যেমন TERM=xterm ssh ...) লগইন করার পরে এটি পরিবর্তন করতে (যেমন পছন্দ করতে পারেন .bash_profile) অথবা সার্ভারের পাশে অজানা TERM প্রকারটি সংজ্ঞায়িত করতে পারেন (ধরে নিচ্ছেন যে সেখানে আপনার রুট অ্যাক্সেস রয়েছে)। বিশদ জন্য অন্যান্য উত্তর দেখুন।


1
সেটিংস $TERMকি আসলেই কোনো যদিও একটি অসমর্থিত মান এটা সেটিং চেয়ে ভাল হতে হবে না।
স্টাফেন চেজেলাস

আক্ষরিক প্রশ্ন ছিল, কীভাবে টিআরএম পাঠানো রোধ করা যায়। - উত্তর: আপনি পারবেন না। - তার যা করা উচিত তা হ'ল এটি একটি উপযুক্ত মান হিসাবে সেট করা।
মিশাস

$TERMঅস্থায়ীভাবে পরিবর্তনটি একটি কার্যতঃ হতে পারে তবে প্রতিবারই আমার এটি করা দরকার। উপায় দ্বারা, মনে হচ্ছে যে উভয় সেন্টওএস 5 এবং ফেডোরা 18 স্বীকার করুন ENV সব লোকেল এনভায়রনমেন্ট ভেরিয়েবল ( LANG, LC_*, ...)
LiuYan刘研
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.