क्या ssh को कॉल करते समय $ TERM का मूल्य बदलना संभव है?


21

मेरे स्थानीय टर्मिनल पर, मेरे पास TERM = konsole-256color है, लेकिन सभी रिमोट मशीन नहीं जो मैं इस परिभाषा से जोड़ता हूं।

क्या रिमोट मशीन पर TERM को बदलना संभव है? दूरस्थ मशीन पर .bash * स्क्रिप्ट को बदले बिना, सिर्फ मेरे स्थानीय डेस्कटॉप पर कॉन्फ़िगरेशन बदलने से?

जवाबों:


9

मैंने अपनी .bashrc फ़ाइल में निम्न उपनाम जोड़े हैं। यह ओजी के उत्तर का उपयोग करता है लेकिन इसे एक उपनाम में लपेटता है। एक जादू की तरह काम करता है ;)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

यदि मैं किसी टर्मिनल से ssh का उपयोग करता हूं तो यह काम करता है। लेकिन मेरे पास कई स्क्रिप्ट भी हैं जो ssh चलाते हैं, और उनके लिए उपनाम का विस्तार नहीं किया गया है। क्या कोई तरीका है जिससे मैं उनमें से प्रत्येक के लिए एक अलग उपनाम बनाने से बच सकता हूँ?
थायने

अगर आपकी स्क्रिप्ट को एक विशिष्ट TERM मान की आवश्यकता है, तो मुझे लगता है कि स्क्रिप्ट में ही उस संस्करण को सेट करना सबसे अच्छा होगा। या यह एक विकल्प नहीं है?
जोहान

यह वास्तव में एक विकल्प नहीं है। इसके अलावा, ये स्क्रिप्ट कुछ मापदंडों के आधार पर एक सर्वर का चयन करती है और उस सर्वर (या संभवतः एक tmux सत्र में सर्वर) के लिए एक ssh सत्र खोलती है, स्क्रिप्ट स्वयं TERM मान पर निर्भर नहीं करती हैं।
थायने

उस स्थिति में आप अपनी बैश प्रोफ़ाइल, या स्क्रिप्ट में एक अलग उपनाम स्क्रिप्ट शामिल कर सकते हैं: shopt -s extension_aliases; source ~ / .bash_aliases
जोहान

7
TERM=vt100 ssh some.host.name

रिमोट पर, $ TERM को इको निष्पादित करें ।


हालांकि मैं इसके बारे में हूं, लेकिन मैं चाहता हूं कि इसे केवल मेरे द्वारा होस्ट किए जाने वाले मेजबानों के सबसेट के लिए सेट किया जाए, इसलिए TERM = ... को जारी करना हर समय काम नहीं करेगा। और यह याद रखना कि किस मेजबान के पास पुरानी जानकारी है, और फिर मक्खी पर कमांड बदलना भी अच्छा नहीं है।

प्रति-होस्ट कॉन्फ़िगरेशन केवल / etc / ssh / ssh_config में समर्थित है, हालाँकि मुझे प्रति होस्ट टर्मिनल मैपिंग मैपिंग का समर्थन करने के लिए कोई कॉन्फ़िगरेशन मान नहीं पता है।
OG

यह ~ / .ssh / config में भी किया जा सकता है, जो मुझे पता है, लेकिन मुझे रिमोट सर्वर पर भेजे गए पर्यावरण को संशोधित करने का कोई विकल्प भी नहीं मिल रहा है। उम्मीद कर रहा था कि मुझे कुछ याद आया।

7

आदमी ssh:

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

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

चूहों, मुझे उम्मीद है कि यह स्थानीय पक्ष पर हो सकता है, फिर भी, अगर कोई इच्छाशक्ति है, तो एक रास्ता है। आदमी ssh_conf:

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 के विन्यास के आधार पर यह "कोई दूरस्थ फ़ाइल संशोधन" की आवश्यकता को पूरा कर सकता है या नहीं कर सकता है।


1
हां, लेकिन यह दूरस्थ पक्ष पर कॉन्फ़िगरेशन है, और मुझे कुछ चाहिए जो केवल स्थानीय छोर पर बदलता है।

4
SendEnv संबंधित नहीं है। यह संभवतः अतिरिक्त env वैरिएबल भेज सकता है , लेकिन: 1. यह उन्हें संशोधित नहीं कर सकता है, और 2. TERM को वैसे भी भेजा जाता है, भले ही वह सेंडवन में सूचीबद्ध न हो।

5

यहाँ मेरा त्वरित और गंदा समाधान है जिसे मैंने एक साथ फेंक दिया है। मुझे कुछ बेहतर चाहिए। मुझे लगता है कि मैं इसके बजाय एक शेल स्क्रिप्ट का उपयोग कर सकता हूं। TERMमूल्यों को समायोजित करना पाठक को एक अभ्यास के रूप में छोड़ दिया जाता है।

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

आदर्श रूप से, यह कुछ ऐसा करेगा जैसे कि दूसरी ओर TERMs की जांच करें, ControlPersistकई कनेक्शनों के लिए लंबे विलंब को रोकने के लिए सामान का उपयोग करें ।


धन्यवाद! मैंने ऐसा कुछ किया है, लेकिन / निर्माण के $TERMसाथ विशिष्ट मूल्यों की जांच करने के बजाय , मैं अपने स्थानीय शब्द में समस्याग्रस्त "tmux" को बिना अधिक सार्वभौमिक रूप से स्वीकृत "स्क्रीन" प्रकार ( यहां स्रोत ) के साथ बिना शर्त बदलने के लिए उपयोग कर रहा हूं । ifelse$(echo -n "$TERM" | sed -e s/tmux/screen/)
20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.