क्या SSH टाइपिंग में देरी से बचने का कोई तरीका है?


43

क्या मैं SSH को केवल एंट्री या टैब दबाने के बाद डेटा भेजने के लिए कह सकता हूं, न कि प्रत्येक व्यक्तिगत कीबोर्ड के बाद?


मुझे बहुत दिलचस्पी है कि आपके पास ऐसी टाइपिंग देरी कहाँ है कि आप इसके साथ काम नहीं कर सकते। मैंने मॉडम युग में ssh का उपयोग किया और कभी भी इन मुद्दों का सामना नहीं किया।
मेल

4
मैं बेल्जियम से एक SliceHost VPS (यूएसए) का उपयोग कर रहा हूं। देरी मुझे ध्यान देने योग्य है। हालाँकि, मैंने देखा है कि अन्य लोग मुझे इससे कम परेशान लगते हैं ..
StackedCrooked


@mailq क्या आप 2019 में 3 जी का उपयोग नहीं करते हैं? गांव के देश के घर या भूमिगत से
sshing

जवाबों:


32

नहीं, क्योंकि SSH के पास यह जानने का कोई तरीका नहीं है कि आप जो टाइप कर रहे हैं, उसमें प्रवेश या टैब टू एक्शन की आवश्यकता होगी - यदि आप अपने कमांड इतिहास के माध्यम से जाने की कोशिश कर रहे हैं, उदाहरण के लिए, ^Rया ऊपर तीर द्वारा नहीं भेजा जाएगा खुद, और वह ... अप्रिय होगा।

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


मैं वास्तव में कई मशीनों में ssh-टाइपिंग-स्पीड को बेंचमार्क करने का एक तरीका खोजने में दिलचस्पी लेगा। मैंने देखा कि गति एक ही स्थान पर स्थित मशीनों के बीच बहुत भिन्न हो सकती है और उन पर कोई भारी भार नहीं पड़ता है। मेरा सिद्धांत यह है कि यह विशेष रूप से एडब्ल्यूएस (जैसे माइक्रो या मिनी वाले) से छोटे उदाहरणों के साथ होता है।
सोरिन

1
मोश पेपर को देखें। लेखक ने कुछ बेंचमार्किंग mosh.org/#techinfo
user7610

25

PuTTY दो सुविधाएँ प्रदान करता है जो कि उपयोग की हो सकती हैं: "स्थानीय गूंज" और "स्थानीय पंक्ति संपादन"। स्थानीय लाइन संपादन बफ़र्स सब कुछ और केवल एक लाइन रिटर्न के बाद सर्वर पर भेजता है। यह कमांड लाइन से निपटने के लिए बहुत आसान बना सकता है, लेकिन यह पाठ संपादक नरक का उपयोग भी कर सकता है।

PuTTY में कुछ चीजों को सक्षम / अक्षम करने के लिए कुछ अन्य विकल्प भी हैं (नागल का एल्गोरिथ्म) जो कथित कनेक्शन विलंबता को प्रभावित कर सकता है। जैसा कि मैं इसे देखता हूं, ओपनएसएसएच क्लाइंट उन सभी सुविधाओं की पेशकश नहीं करता है, जो इस संबंध में पुट्टी करता है, और मुझे एक लिनक्स विकल्प की जानकारी नहीं है जो तुलना करता है।

अन्यथा, वोमबेल का अधिकार है।


यह स्वीकृत उत्तर होना चाहिए
फ्रेडी फैब्रेगा

मैं macto पर PuTTY स्थापित करने में विफल रहा, क्या कोई प्रतिस्थापन है?
एयरो विंडवॉकर

लिनक्स पर पोटीन थोड़ा दर्द होता है। यह स्वचालित रूप से पुन: कनेक्ट नहीं हो सकता है, डिस्कनेक्ट पर कुछ संदेश बॉक्स दिखाता है और मुझे फिर से विंडो खोलने की आवश्यकता है। काश मैं किसी तरह किटी या plink.exe का उपयोग कर सकता हूँ linux पर या बेहतर करने के लिए बस किसी भी तरह से ऑटो करना। कुछ डिवाइस mosh tho का समर्थन नहीं करते हैं (यदि मैं अपने होम ओपनरेट राउटर तक पहुंचने की कोशिश कर रहा हूं)
POMATu

22

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


आप इसे सूडो के बिना स्रोत से स्थानीय निर्देशिका पर स्थापित कर सकते हैं। इसके अलावा, mosh.org पर जाएं। इसमें कहा गया है, "कोई विशेषाधिकार प्राप्त कोड नहीं। कोई डेमॉन नहीं। आपको मॉश को स्थापित करने या चलाने के लिए सुपरयुसर होने की आवश्यकता नहीं है। क्लाइंट और सर्वर एक साधारण उपयोगकर्ता द्वारा चलाए जा रहे हैं और केवल कनेक्शन के जीवन के लिए चलते हैं।"
स्टीवन सी। हॉवेल

1
बस ध्यान देना है। मोश एसएसएच नहीं है। यह अपने स्वामित्व प्रोटोकॉल का उपयोग करता है। (मैं उस के साथ एक समस्या नहीं है, हालांकि।)
user7610

यह मेरे लिए एंड्रॉइड और होम बैड वाईफाई नेटवर्क पर स्क्रैच से काम करता है। यह
टिनमारिनो

9

Ssh सत्र खोलें ssh host.example.org bash(या जो भी शेल आप उपयोग करना चाहते हैं)।

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

अपडेट करें:

उपरोक्त चाल का उपयोग करते समय आप एक सुविधाजनक आवरण प्रोग्राम का उपयोग करके स्थानीय छोर पर सामान्य लाइन संपादन ( रीडलाइन ) प्राप्त कर सकते हैं जिसे रॉल्फ कहा जाता है । जरा दौड़ो ।rlfe ssh host.example.org bash


1
मैंने कोशिश की और इसे बहुत काम का नहीं पाया। लेकिन यह जानने के लिए अच्छा है, धन्यवाद।
स्टैकडक्रॉक्ड

यह मेरे लिए अद्भुत काम करता है।
लेकसरे

6

(समान मुद्दा था करने के बाद भयानक मोबाइल डेटा की गुणवत्ता की वजह से उच्च विलंबता और पैकेट क्षति कुछ स्थानों पर), और mosh मेरे लिए यह काटने नहीं है (यह सभी दूरस्थ होस्ट पर विशेष कार्यक्रम की जरूरत है, उन्हें तोड़ने के बिना सभी सर्वरों पर स्थानीय रूप से और दूर से UTF8 फिक्सिंग , सभी फायरवॉल को संशोधित करना - और यह वास्तव में वैसे भी स्थानीय लाइन संपादन प्रदान नहीं करता है) मैंने ssh के लिए स्थानीय लाइन संपादन मोड प्रदान करने के लिए एक छोटा आवरण लिखने का फैसला किया है ।

डिफ़ॉल्ट रूप से, यह डिफॉल्ट चार-दर-चार मोड में ssh करने के लिए सब कुछ पास करता है, लेकिन आप किसी भी समय रीडलाइन-संचालित स्थानीय लाइन संपादन मोड में प्रवेश करने के लिए हॉटकी दबा सकते हैं। तो आप स्थानीय रूप से पूरी पंक्ति को संपादित (कमांड, रिकॉलिंग आदि के साथ) दर्ज कर सकते हैं, और फिर जब आप एंटर दबाते हैं तो इसे एक टीसीपी पैकेट के रूप में रिमोट साइड में भेजा जाएगा।

एडवांटेज लैग-फ्री कमांड लाइन एडिटिंग है (जैसे पुराने टेलनेट कुक / कैनोनिकल "लाइन-बाय-लाइन बफर मोड", लेकिन जीएनयू रीडलाइन द्वारा प्रदान किए गए बेहतर संपादन कमांड के साथ )। इसके अलावा, सर्वर या फायरवॉल पर कुछ भी बदलने की जरूरत नहीं है। और संपादकों और अन्य शाप आधारित कार्यक्रम सामान्य एसएचएस कनेक्शन के रूप में सामान्य रूप से डिफ़ॉल्ट चार-चार-मोड में सामान्य रूप से काम करना जारी रखते हैं।

नुकसान यह है कि आपको या तो हॉटकी को स्थानीय पंक्ति संपादन मोड में प्रवेश करने के लिए हर बार इसे दबाए जाने की आवश्यकता होती है, या ऑटोडेटेनेशन की अनुमति देने के लिए आपको दूरस्थ होस्ट पर शीघ्र संशोधित करने की आवश्यकता होती है। इसके अलावा, रिमोट टैब फ़ाइलनेम पूरा होना वर्तमान में आपको केवल चार-चार-चार मोड में वापस छोड़ने के द्वारा ही काम करता है (या आपकी पसंद के आधार पर रिमोट के बजाय स्थानीय फाइल सिस्टम का उपयोग करता है)। हालांकि, यह प्रगति पर काम कर रहा है, इसलिए सुधार के लिए अनुरोध या व्यावहारिक विचारों का स्वागत है!


अपरंपरागत पक्ष पर, आप स्थानीय फाइल सिस्टम को स्थानीय रूप से माउंट करने के लिए वैकल्पिक रूप से SSHFS का उपयोग कर सकते हैं ।

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

नुकसान हैं (खासकर यदि आप लिंक कम-बैंडविड्थ भी हैं, और न केवल उच्च-विलंबता), जिसे संपादित करने के लिए प्रत्येक फ़ाइल के लिए, इसे पूरी तरह से लोकलहोस्ट में स्थानांतरित किया जाना चाहिए, और फिर संपादित करने के बाद, पूरी तरह से फिर से रिमोट में स्थानांतरित कर दिया जाना चाहिए। SSHFS कुछ समस्याओं के निवारण के लिए कुछ कैशिंग (sshfs (1) विकल्प कैश , cache_timeout , cache_x_timeout देखें ) के लिए प्रदान करता है। इसके अलावा, यदि आप रिमोट पर किसी चीज़ को निष्पादित करना चाहते हैं, तो आपको " ssh रिमोटहोस्ट " (उदाहरण के लिए ssh remotehost sudo service apache restart) के साथ सभी कमांड का उपयोग करने के लिए दूसरी स्क्रीन या उपसर्ग का उपयोग करना होगा । विकल्प देखें ControlMaster में ssh_config (5) कि तेजी से (और पासवर्ड को संकेत दिए बिना) निष्पादित करने के लिए बनाने के लिए।


3

आप उस व्यवहार का अनुकरण कर सकते हैं, यदि आप केवल आज्ञा देकर चल रहे हैं,

ssh उपयोगकर्ता @ targetmachine 'एक स्ट्रिंग में मेरे आदेश'

परंतु,

  1. यह कनेक्शन बनाने में एक अतिरिक्त देरी जोड़ता है ( मास्टर / साझा ssh कनेक्शन का उपयोग करके इसे कम किया जा सकता है )
  2. यदि आपके पास पासवर्ड रहित निजी कुंजी नहीं है, तो आपको पासवर्ड का उपयोग करना होगा ssh-agentया टाइप करना होगा
  3. स्पष्ट रूप से यह काम नहीं करता है यदि आप मेनू या संपादन फ़ाइलों आदि के साथ बातचीत कर रहे हैं।

1

अपनी टाइपिंग की धाराप्रवाह प्रतिध्वनि प्राप्त करने के लिए आप 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\'

0

यह वही करता है जो आप चाहते हैं। आपको क्लाइंट और सर्वर दोनों को स्थापित करने की आवश्यकता है, और ओपनएसएसएच अपस्ट्रीम ने कभी भी बदलावों को नहीं अपनाया। https://github.com/hyc/OpenSSH-LINEMODE

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.