SSH क्लाइंट को सर्वर पर TERM एनवायरनमेंट वेरिएबल पास करने से रोकें?


21

मैं वर्तमान में फेडोरा 18 सूक्ति-टर्मिनल का उपयोग कर रहा हूं , फिर tmuxइसमें मल्टीप्लेक्स शुरू किया। मैं कमांड के माध्यम से एक CentOS 5 सर्वर से जुड़ा होने के बाद ssh, मुझे लगता है:

  • ls परिणाम का कोई रंग नहीं है
  • tmux, screen, hexedit, htopसभी तरह त्रुटि संदेश के साथ प्रारंभ करने में विफल:
    खुला टर्मिनल विफल: अनुपलब्ध या अनुपयोगी टर्मिनल: स्क्रीन -255 कैलोर

ऐसा लगता है कि sshसर्वर पर $ TERM पर्यावरण चर पारित करता है, लेकिन मैं इसे /etc/ssh/ssh_configFedora 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-256colorFedora 18 से CentOS में कॉपी (rsync) करता हूं , ऐसा लगता है कि यह ठीक है ( rsync -tv /usr/share/terminfo/s/screen-256color root@the_host:/usr/share/terminfo/s)।
लियूयान

उल्लेख करना भूल गया, मैं tmuxफेडोरा 18 के सूक्ति-टर्मिनल में भाग गया, से मूल्य tmuxबदल दिया । $TERMscreen-256colorxterm-256color
लियूयान

btw, ssh इस तरह से काम कर सकता है: टर्मऑफ़ प्राप्त करें जो होस्ट / सर्वर समर्थित (धक्का नहीं दिया गया है), फिर पिकअप एक क्लाइंट टर्मिनल का समर्थन कर सकता है?
लियूयान

2
infocmp | ssh -t root@remote-host 'cat > "$TERM.info" && tic "$TERM.info"'को छोटा किया जा सकता है infocmp | ssh root@remote-host "tic -"। यह काम करता है क्योंकि जब आपके पास एक पाइप होता है तो इसे एक फाइल के रूप में एक्सेस किया जा सकता है - और सौभाग्य से पाइप SSH के पार काम करते हैं।
एलन जेनकिंस

1
@starfry, मैं आपको इस बात की कोई गारंटी नहीं दे सकता कि 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 रंगों का समर्थन करता है, तो मैं दीवार के खिलाफ अपने सिर को पीटना समाप्त नहीं करूंगा, यह सोचकर कि एसएसएचिंग होने पर मेरा TERM चर क्यों बदल जाता है।


या, एक export TERM=${TERM%%-256color}
सबशेल

1

बदलना $TERMकाम कर सकता है, लेकिन मैं यह सुझाव नहीं देता, यह केवल एक समाधान के बजाय एक समाधान है।

जब मैं अपने सिस्टम पर इस समस्या का सामना करता हूं, तो मैं इसे सबसे सामान्य टर्मिनल प्रकार के रिमोट सिस्टम के लिए समर्थन स्थापित करके ठीक करता हूं:

  • yum install ncurses-baseके लिए screen-256colorCentOS पर
  • yum install ncurses-termके लिए screen-256color-bceCentOS पर
  • apt install ncurses-baseदोनों के लिए screen-256colorऔर screen-256color-bceडेबियन, Ubuntu और टकसाल पर

नर्सेस-संबंधित पैकेज बहुत सारे अन्य टर्मिनलों के लिए भी सहायता प्रदान करते हैं, और वे अन्य सभी बड़े वितरणों पर भी उपलब्ध हैं। (लेकिन मेरे उपयोग-मामले और आपके प्रश्न के लिए यह पर्याप्त जानकारी होनी चाहिए)


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.

उसके अनुसार, डिफ़ॉल्ट किसी भी चर को भेजने के लिए नहीं होना चाहिए, लेकिन TERM विशेष प्रतीत होता है। यह वैसे भी भेजा जाता है।

इसलिए ssh (जैसे TERM=xterm ssh ...) को कॉल करते समय आप या तो TERM को बदल सकते हैं , लॉगिन (जैसे .bash_profile) के बाद इसे बदल सकते हैं , या सर्वर पक्ष पर अज्ञात TERM प्रकार को परिभाषित कर सकते हैं (यह मानते हुए कि आपके पास रूट एक्सेस है)। विवरण के लिए अन्य उत्तर देखें।


1
$TERMहालांकि सेटिंग नहीं करना वास्तव में इसे असमर्थित मान पर सेट करने से बेहतर होगा।
स्टीफन चेज़लस

शाब्दिक प्रश्न था, TERM भेजने से कैसे रोका जाए। - उत्तर: आप नहीं कर सकते। - उसे जो करना चाहिए वह उसे उपयुक्त मूल्य पर सेट कर रहा है, हाँ।
माईस

परिवर्तन $TERMअस्थायी रूप से एक समाधान हो सकता है, लेकिन मुझे इसे हर बार करने की आवश्यकता है। वैसे, ऐसा लगता है कि दोनों CentOS 5 और फेडोरा 18 स्वीकारें पर्यावरण सभी लोकेल वातावरण चर ( LANG, LC_*, ...)
LiuYan刘研
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.