
दूरस्थ टर्मिनल एप्लिकेशन जो रुक-रुक कर कनेक्टिविटी, IP रोमिंग, और उच्च-विलंबता लिंक के लिए अनुमानित स्थानीय इको का समर्थन करता है। SSH-आधारित प्रमाणीकरण के साथ UDP पर AES-128 एन्क्रिप्शन का उपयोग करता है।
Mosh एक रिमोट टर्मिनल एप्लिकेशन है जो रुक-रुक कर कनेक्टिविटी का समर्थन करता है, रोमिंग की अनुमति देता है, और उपयोगकर्ता कीस्ट्रोक्स की अनुमानित स्थानीय प्रतिध्वनि और लाइन संपादन प्रदान करता है।
इसका उद्देश्य SSH के विशिष्ट इंटरैक्टिव उपयोगों का समर्थन करना है, साथ ही:
Mosh सत्र को जीवित रखता है यदि क्लाइंट सो जाता है और बाद में जागता है, या अस्थायी रूप से अपना इंटरनेट कनेक्शन खो देता है।
Mosh क्लाइंट और सर्वर को कनेक्शन को जीवित रखते हुए "रोम" करने और IP पतों को बदलने की अनुमति देता है। SSH के विपरीत, Mosh का उपयोग Wi-Fi नेटवर्क के बीच स्विच करने या Wi-Fi से सेलुलर डेटा से वायर्ड ईथरनेट पर स्विच करने के दौरान किया जा सकता है।
Mosh क्लाइंट पृष्ठभूमि में सर्वर के व्यवहार का एक पूर्वानुमानित मॉडल चलाता है और बुद्धिमानी से अनुमान लगाने का प्रयास करता है कि प्रत्येक कीस्ट्रोक स्क्रीन स्थिति को कैसे प्रभावित करेगा। जब यह अपने पूर्वानुमानों में आश्वस्त होता है, तो यह सर्वर से पुष्टि की प्रतीक्षा करते हुए उन्हें उपयोगकर्ता को दिखाएगा। अधिकांश टाइपिंग और बाएँ और दाएँ तीर कुंजियों के उपयोग को तुरंत प्रतिध्वनित किया जा सकता है।
परिणामस्वरूप, Mosh उच्च-विलंबता लिंक पर उपयोग योग्य है, उदा. सेलुलर डेटा कनेक्शन या अनियमित Wi-Fi पर। अन्य प्रोटोकॉल में स्थानीय प्रतिध्वनि मोड के पिछले प्रयासों से अलग, Mosh emacs, vi, alpine और irssi जैसे पूर्ण-स्क्रीन अनुप्रयोगों के साथ ठीक से काम करता है, और एक RTT के भीतर सामयिक पूर्वानुमान त्रुटियों से स्वचालित रूप से उबर जाता है। उच्च-विलंबता लिंक पर, Mosh अपने पूर्वानुमानों को रेखांकित करता है जब तक वे बकाया हैं और जब सर्वर द्वारा पुष्टि की जाती है तो रेखांकन हटा देता है।
Mosh X फ़ॉरवर्डिंग या SSH के गैर-इंटरैक्टिव उपयोगों का समर्थन नहीं करता है, जिसमें पोर्ट फ़ॉरवर्डिंग शामिल है।
Mosh अपनी फ्रेम दर को समायोजित करता है ताकि धीमे लिंक पर नेटवर्क कतारें भर न जाएं, इसलिए "Control-C" हमेशा एक RTT के भीतर काम करता है ताकि एक भगोड़ी प्रक्रिया को रोका जा सके।
Mosh उपयोगकर्ता को चेतावनी देता है जब उसने कुछ समय से सर्वर से कुछ नहीं सुना है।
Mosh उन लॉसी लिंक का समर्थन करता है जो अपने पैकेट का एक महत्वपूर्ण अंश खो देते हैं।
Mosh कुछ यूनिकोड एज मामलों को SSH और मौजूदा टर्मिनल एमुलेटर से बेहतर तरीके से संभालता है, लेकिन चलाने के लिए UTF-8 वातावरण की आवश्यकता होती है।
Mosh कनेक्शन स्थापित करने और उपयोगकर्ताओं को प्रमाणित करने के लिए SSH का लाभ उठाता है। Mosh में कोई विशेषाधिकार प्राप्त (रूट) कोड नहीं है।
Mosh वेब साइट पर कई ऑपरेटिंग सिस्टम के लिए पैकेजों के बारे में जानकारी है, साथ ही स्रोत से निर्माण के निर्देश भी हैं।
ध्यान दें कि mosh-client एक AES सत्र कुंजी को एक पर्यावरण चर के रूप में प्राप्त करता है। यदि आप Mosh को किसी नए ऑपरेटिंग सिस्टम पर पोर्ट कर रहे हैं, तो कृपया सुनिश्चित करें कि चल रही प्रक्रिया के पर्यावरण चर अन्य उपयोगकर्ताओं द्वारा पढ़ने योग्य नहीं हैं। हमने पुष्टि की है कि GNU/Linux, OS X और FreeBSD पर ऐसा ही है।
mosh-client बाइनरी उपयोगकर्ता की मशीन पर मौजूद होना चाहिए, और mosh-server बाइनरी रिमोट होस्ट पर।
उपयोगकर्ता चलाता है:
$ mosh [user@]host
यदि mosh-client या mosh-server बाइनरी उपयोगकर्ता के $PATH के बाहर स्थित हैं, तो mosh वैकल्पिक स्थानों का चयन करने के लिए --client=PATH और --server=PATH तर्क स्वीकार करता है। अधिक विकल्प mosh(1) मैनुअल पेज में प्रलेखित हैं।
Mosh वेब साइट पर और उदाहरण और FAQ हैं।
mosh प्रोग्राम कनेक्शन स्थापित करने के लिए user@host पर SSH करेगा। SSH उपयोगकर्ता को पासवर्ड के लिए संकेत दे सकता है या लॉग इन करने के लिए पब्लिक-की प्रमाणीकरण का उपयोग कर सकता है।
इस बिंदु से, mosh सर्वर मशीन पर mosh-server प्रक्रिया (उपयोगकर्ता के रूप में) चलाता है। सर्वर प्रक्रिया एक उच्च UDP पोर्ट पर सुनती है और अपना पोर्ट नंबर और एक AES-128 गुप्त कुंजी SSH के माध्यम से क्लाइंट को वापस भेजती है। फिर SSH कनेक्शन बंद कर दिया जाता है और टर्मिनल सत्र UDP पर शुरू होता है।
यदि क्लाइंट IP पता बदलता है, तो सर्वर कुछ सेकंड के भीतर नए IP पते पर क्लाइंट को भेजना शुरू कर देगा।
कार्य करने के लिए, Mosh को क्लाइंट और सर्वर के बीच UDP डेटाग्राम पास करने की आवश्यकता होती है। डिफ़ॉल्ट रूप से, mosh 60000 और 61000 के बीच एक पोर्ट नंबर का उपयोग करता है, लेकिन उपयोगकर्ता -p विकल्प के साथ एक विशिष्ट पोर्ट का चयन कर सकता है। कृपया ध्यान दें कि -p विकल्प का SSH द्वारा उपयोग किए जाने वाले पोर्ट पर कोई प्रभाव नहीं पड़ता है।
कंपाइलर फ्लैग पर एक नोट: Mosh सुरक्षा-संवेदनशील कोड है। बाइनरी पैकेज के लिए स्वचालित बिल्ड बनाते समय, हम ./configure को --enable-compile-warnings=error विकल्प पास करने की सलाह देते हैं। g++ या clang++ के साथ GNU/Linux पर, पैकेज को -Werror के साथ साफ-सुथरा संकलित करना चाहिए। यदि ऐसा नहीं होता है तो कृपया एक बग की रिपोर्ट करें।
जहां उपलब्ध हो, Mosh विभिन्न बाइनरी हार्डनिंग फ्लैग जैसे -fstack-protector-all, -D_FORTIFY_SOURCE=2, आदि के साथ बनता है। ये Mosh या इसके द्वारा उपयोग की जाने वाली लाइब्रेरी में मेमोरी भ्रष्टाचार बग की संभावना के खिलाफ सक्रिय सुरक्षा प्रदान करते हैं। फ्लैग की पूरी सूची के लिए, configure.ac में HARDEN खोजें। configure स्क्रिप्ट पता लगाती है कि आपके कंपाइलर द्वारा कौन से फ्लैग समर्थित हैं, और उन्हें स्वचालित रूप से सक्षम करती है। इस पहचान को अक्षम करने के लिए, ./configure को --disable-hardening पास करें। यदि आपको डिफ़ॉल्ट सेटिंग्स में समस्या होती है तो कृपया एक बग की रिपोर्ट करें; हम चाहते हैं कि अधिक से अधिक उपयोगकर्ता यथासंभव सुरक्षित कॉन्फ़िगरेशन चला रहे हों।
Mosh -O2 की डिफ़ॉल्ट ऑप्टिमाइज़ेशन सेटिंग के साथ आता है। कुछ वितरकों ने इसे -Os में बदलने के बारे में पूछा है (जो कंपाइलर को समय ऑप्टिमाइज़ेशन पर स्थान ऑप्टिमाइज़ेशन को प्राथमिकता देने का कारण बनता है)। हमने इसका परीक्षण करने के लिए शामिल src/examples/benchmark प्रोग्राम के साथ बेंचमार्क किया है। परिणाम यह है कि -O2 GNU/Linux पर g++ 4.6 के साथ -Os से 40% तेज़ है, और Mac OS X पर clang++ 3.1 के साथ -Os से 16% तेज़ है। दोनों मामलों में, -Os ने एक छोटा बाइनरी उत्पन्न किया (40% तक, लगभग 200 किलोबाइट डिस्क पर बचत)। जबकि Mosh विशेष रूप से CPU गहन नहीं है और जब उपयोगकर्ता टाइप नहीं कर रहा है तो ज्यादातर निष्क्रिय रहता है, हमें लगता है कि परिणाम बताते हैं कि -O2 (डिफ़ॉल्ट) बेहतर है।
हमारी Debian और Fedora पैकेजिंग Mosh को एक एकल पैकेज के रूप में प्रस्तुत करती है। Mosh की एक Perl निर्भरता है जो केवल क्लाइंट उपयोग के लिए आवश्यक है। कुछ प्लेटफार्मों के लिए, Perl के बिना mosh-server उपयोग की अनुमति देने के लिए अलग-अलग mosh-server और mosh-client पैकेज रखना समझ में आ सकता है।
Mosh में योगदान देना शुरू करने के लिए, निम्नलिखित निर्भरताएं स्थापित करें:
Debian, Windows Subsystem for Linux:
$ sudo apt install -y build-essential protobuf-compiler \
libprotobuf-dev pkg-config libutempter-dev zlib1g-dev libncurses5-dev \
libssl-dev bash-completion tmux less
Fedora, RHEL:
$ sudo dnf group install development-tools
$ sudo dnf install automake protobuf-compiler protobuf-devel libutempter-devel \
zlib-ng-compat-devel ncurses-devel openssl-devel bash-completion tmux less \
perl-diagnostics
MacOS:
$ brew install protobuf automake
एक बार जब आप रिपॉजिटरी को फोर्क कर लेते हैं, तो Mosh को बनाने और परीक्षण करने के लिए निम्नलिखित चलाएँ:
$ ./autogen.sh
$ ./configure
$ make
$ make check
Mosh परीक्षणों द्वारा कोड कवरेज रिपोर्ट तैयार करने का समर्थन करता है, लेकिन यह सुविधा डिफ़ॉल्ट रूप से अक्षम है। इसे सक्षम करने के लिए, सुनिश्चित करें कि आपके सिस्टम पर lcov स्थापित है। फिर, परीक्षणों को कॉन्फ़िगर करें और चलाएँ:
$ ./configure --enable-code-coverage
$ make check-code-coverage
यह सभी परीक्षण चलाएगा और HTML रूप में एक कवरेज रिपोर्ट तैयार करेगा जिसे आपके पसंदीदा ब्राउज़र से खोला जा सकता है। आदर्श रूप से, नव जोड़े गए कोड को 90% (या बेहतर) वृद्धिशील परीक्षण कवरेज के लिए प्रयास करना चाहिए।
Mosh वेब साइट:
[email protected] मेलिंग सूची:
[email protected] मेलिंग सूची:
#mosh चैनल Libera Chat पर: