क्या मैं SSH को केवल एंट्री या टैब दबाने के बाद डेटा भेजने के लिए कह सकता हूं, न कि प्रत्येक व्यक्तिगत कीबोर्ड के बाद?
क्या मैं SSH को केवल एंट्री या टैब दबाने के बाद डेटा भेजने के लिए कह सकता हूं, न कि प्रत्येक व्यक्तिगत कीबोर्ड के बाद?
जवाबों:
नहीं, क्योंकि SSH के पास यह जानने का कोई तरीका नहीं है कि आप जो टाइप कर रहे हैं, उसमें प्रवेश या टैब टू एक्शन की आवश्यकता होगी - यदि आप अपने कमांड इतिहास के माध्यम से जाने की कोशिश कर रहे हैं, उदाहरण के लिए, ^R
या ऊपर तीर द्वारा नहीं भेजा जाएगा खुद, और वह ... अप्रिय होगा।
यद्यपि स्क्रीन पर प्रदर्शित होने के लिए आपको प्रत्येक वर्ण के बीच प्रतीक्षा नहीं करनी होगी; अगर आपको पता है कि आपको क्या टाइप करना है, तो जितनी जल्दी हो सके उतनी ही तेजी से इसे दूर फेंक दें, और जब आप टाइप करना बंद कर देंगे, तो टर्मिनल लगभग एक राउंड-ट्रिप समय में पकड़ लेगा, जो लगभग उतना ही अच्छा है जितना आप बाहर निकलेंगे एक पंक्ति-बफ़र्ड सेटअप वैसे भी (पैकेट का नुकसान अलग है, लेकिन यह परिचय देता है कि यह स्वयं दिलचस्प क्विर्क है)।
PuTTY दो सुविधाएँ प्रदान करता है जो कि उपयोग की हो सकती हैं: "स्थानीय गूंज" और "स्थानीय पंक्ति संपादन"। स्थानीय लाइन संपादन बफ़र्स सब कुछ और केवल एक लाइन रिटर्न के बाद सर्वर पर भेजता है। यह कमांड लाइन से निपटने के लिए बहुत आसान बना सकता है, लेकिन यह पाठ संपादक नरक का उपयोग भी कर सकता है।
PuTTY में कुछ चीजों को सक्षम / अक्षम करने के लिए कुछ अन्य विकल्प भी हैं (नागल का एल्गोरिथ्म) जो कथित कनेक्शन विलंबता को प्रभावित कर सकता है। जैसा कि मैं इसे देखता हूं, ओपनएसएसएच क्लाइंट उन सभी सुविधाओं की पेशकश नहीं करता है, जो इस संबंध में पुट्टी करता है, और मुझे एक लिनक्स विकल्प की जानकारी नहीं है जो तुलना करता है।
अन्यथा, वोमबेल का अधिकार है।
मोश को इस सटीक मुद्दे को संबोधित करने के लिए डिज़ाइन किया गया था। यह उच्च-विलंबता और अविश्वसनीय कनेक्शन पर उपयोग के लिए डिज़ाइन किया गया है, और स्थानीय गूंज और लाइन संपादन प्रदान करता है।
Ssh सत्र खोलें ssh host.example.org bash
(या जो भी शेल आप उपयोग करना चाहते हैं)।
आपको दूरस्थ शेल में लाइन-बफ़र्ड मोड मिलेगा, जिसका अर्थ है कि आपको प्रॉम्प्ट और लाइन-संपादन नहीं मिलेगा, लेकिन आपको स्थानीय गूंज और "एक समय में एक पंक्ति" मोड मिलेगा। कभी-कभी बहुत खराब कनेक्शन के साथ काम करते समय यह उपयोगी होता है। सभी प्रोग्राम ठीक से नहीं चलेंगे, क्योंकि आपके पास छद्म ट्टी नहीं होगी, लेकिन अधिकांश यूनिक्स उपयोगिताएँ ठीक काम करती हैं।
अपडेट करें:
उपरोक्त चाल का उपयोग करते समय आप एक सुविधाजनक आवरण प्रोग्राम का उपयोग करके स्थानीय छोर पर सामान्य लाइन संपादन ( रीडलाइन ) प्राप्त कर सकते हैं जिसे रॉल्फ कहा जाता है । जरा दौड़ो ।rlfe ssh host.example.org bash
(समान मुद्दा था करने के बाद भयानक मोबाइल डेटा की गुणवत्ता की वजह से उच्च विलंबता और पैकेट क्षति कुछ स्थानों पर), और mosh मेरे लिए यह काटने नहीं है (यह सभी दूरस्थ होस्ट पर विशेष कार्यक्रम की जरूरत है, उन्हें तोड़ने के बिना सभी सर्वरों पर स्थानीय रूप से और दूर से UTF8 फिक्सिंग , सभी फायरवॉल को संशोधित करना - और यह वास्तव में वैसे भी स्थानीय लाइन संपादन प्रदान नहीं करता है) मैंने ssh के लिए स्थानीय लाइन संपादन मोड प्रदान करने के लिए एक छोटा आवरण लिखने का फैसला किया है ।
डिफ़ॉल्ट रूप से, यह डिफॉल्ट चार-दर-चार मोड में ssh करने के लिए सब कुछ पास करता है, लेकिन आप किसी भी समय रीडलाइन-संचालित स्थानीय लाइन संपादन मोड में प्रवेश करने के लिए हॉटकी दबा सकते हैं। तो आप स्थानीय रूप से पूरी पंक्ति को संपादित (कमांड, रिकॉलिंग आदि के साथ) दर्ज कर सकते हैं, और फिर जब आप एंटर दबाते हैं तो इसे एक टीसीपी पैकेट के रूप में रिमोट साइड में भेजा जाएगा।
एडवांटेज लैग-फ्री कमांड लाइन एडिटिंग है (जैसे पुराने टेलनेट कुक / कैनोनिकल "लाइन-बाय-लाइन बफर मोड", लेकिन जीएनयू रीडलाइन द्वारा प्रदान किए गए बेहतर संपादन कमांड के साथ )। इसके अलावा, सर्वर या फायरवॉल पर कुछ भी बदलने की जरूरत नहीं है। और संपादकों और अन्य शाप आधारित कार्यक्रम सामान्य एसएचएस कनेक्शन के रूप में सामान्य रूप से डिफ़ॉल्ट चार-चार-मोड में सामान्य रूप से काम करना जारी रखते हैं।
नुकसान यह है कि आपको या तो हॉटकी को स्थानीय पंक्ति संपादन मोड में प्रवेश करने के लिए हर बार इसे दबाए जाने की आवश्यकता होती है, या ऑटोडेटेनेशन की अनुमति देने के लिए आपको दूरस्थ होस्ट पर शीघ्र संशोधित करने की आवश्यकता होती है। इसके अलावा, रिमोट टैब फ़ाइलनेम पूरा होना वर्तमान में आपको केवल चार-चार-चार मोड में वापस छोड़ने के द्वारा ही काम करता है (या आपकी पसंद के आधार पर रिमोट के बजाय स्थानीय फाइल सिस्टम का उपयोग करता है)। हालांकि, यह प्रगति पर काम कर रहा है, इसलिए सुधार के लिए अनुरोध या व्यावहारिक विचारों का स्वागत है!
फायदा यह नहीं है कि आपका शेल (और इसकी लाइन एडिटिंग) लोकल और लैग-फ्री है, बल्कि यह भी है कि आप रिमोट फाइलसिस्टम को नेविगेट कर सकते हैं और रिमोट फाइल्स को पूरा करने के लिए शेल फाइलनाम पूरा ( टैब की ) का उपयोग कर सकते हैं । इसके अलावा, सबसे अच्छी सुविधा IMHO) आप दूरस्थ फ़ाइलों के अंतराल मुक्त संपादन के लिए अपनी पसंद के स्थानीय संपादक का उपयोग कर सकते हैं।
नुकसान हैं (खासकर यदि आप लिंक कम-बैंडविड्थ भी हैं, और न केवल उच्च-विलंबता), जिसे संपादित करने के लिए प्रत्येक फ़ाइल के लिए, इसे पूरी तरह से लोकलहोस्ट में स्थानांतरित किया जाना चाहिए, और फिर संपादित करने के बाद, पूरी तरह से फिर से रिमोट में स्थानांतरित कर दिया जाना चाहिए। SSHFS कुछ समस्याओं के निवारण के लिए कुछ कैशिंग (sshfs (1) विकल्प कैश , cache_timeout , cache_x_timeout देखें ) के लिए प्रदान करता है। इसके अलावा, यदि आप रिमोट पर किसी चीज़ को निष्पादित करना चाहते हैं, तो आपको " ssh रिमोटहोस्ट " (उदाहरण के लिए ssh remotehost sudo service apache restart
) के साथ सभी कमांड का उपयोग करने के लिए दूसरी स्क्रीन या उपसर्ग का उपयोग करना होगा । विकल्प देखें ControlMaster में ssh_config (5) कि तेजी से (और पासवर्ड को संकेत दिए बिना) निष्पादित करने के लिए बनाने के लिए।
आप उस व्यवहार का अनुकरण कर सकते हैं, यदि आप केवल आज्ञा देकर चल रहे हैं,
ssh उपयोगकर्ता @ targetmachine 'एक स्ट्रिंग में मेरे आदेश'
परंतु,
ssh-agent
या टाइप करना होगाअपनी टाइपिंग की धाराप्रवाह प्रतिध्वनि प्राप्त करने के लिए आप tmux का उपयोग कर सकते हैं। स्थानीय रूप से tmux चलाएं। यदि आपके पास एक फलक में ssh शेल है, और उसके नीचे एक फलक में एक स्थानीय शेल है, तो स्थानीय फलक से आप दूरस्थ फलक पर कुंजियाँ भेज सकते हैं।
tmux send-keys -t top 'ls' C-m
इंटरएक्टिव कमांड और छोटे कमांड मैं सीधे लैगिंग ssh शेल में टाइप करते हैं। जैसे ही लैग मेरी टाइपिंग में बाधा डालना शुरू करता है, मैं स्थानीय फलक पर स्विच करता हूं और सेंड-की का उपयोग करता हूं। यह कमांड टाइप करने के बीच में भी काम करता है।
इसे शॉर्टकट करने के लिए मैंने इसे अपने .bashrc में जोड़ा
function ts {
args=$@
tmux send-keys -t right "$args" C-m
}
सेंड-कीज़ समझाने के लिए क्रिश्चियन पेल्स्कार्स्की को धन्यवाद: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html
उदाहरण के लिए, उद्धरणों का उपयोग करते समय आपको बचना होगा
ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'
यह वही करता है जो आप चाहते हैं। आपको क्लाइंट और सर्वर दोनों को स्थापित करने की आवश्यकता है, और ओपनएसएसएच अपस्ट्रीम ने कभी भी बदलावों को नहीं अपनाया। https://github.com/hyc/OpenSSH-LINEMODE