
SwiftNIO SSH, SwiftNIO का उपयोग करके SSH का एक प्रोग्रामेटिक कार्यान्वयन है।
इस प्रोजेक्ट में SwiftNIO का उपयोग करके SSH समर्थन शामिल है।
SwiftNIO SSH, SSH का एक प्रोग्रामेटिक कार्यान्वयन है: अर्थात्, यह API का एक संग्रह है जो प्रोग्रामरों को SSH-बोलने वाले एंडपॉइंट लागू करने की अनुमति देता है। महत्वपूर्ण रूप से, इसका मतलब है कि यह openssh की तुलना में libssh2 की तरह अधिक है। SwiftNIO SSH उत्पादन-तैयार SSH क्लाइंट और सर्वर नहीं भेजता है, बल्कि इस प्रकार के क्लाइंट और सर्वर बनाने के लिए बिल्डिंग ब्लॉक्स प्रदान करता है।
प्रोग्रामेटिक SSH कार्यान्वयन प्रदान करने के कई कारण हैं। एक यह है कि SSH का उपयोगकर्ता अंतःक्रियाशीलता से एक अनोखा संबंध है। तकनीकी उपयोगकर्ता SSH के साथ इंटरैक्टिव रूप से बातचीत करने के काफी आदी हैं, या तो दूरस्थ मशीनों पर कमांड चलाने के लिए या इंटरैक्टिव शेल चलाने के लिए। इन अनुरोधों का प्रोग्रामेटिक रूप से जवाब देने की क्षमता होने से बातचीत के दिलचस्प वैकल्पिक तरीके सक्षम होते हैं। पिछले उदाहरणों के रूप में, हम Twisted के Manhole की ओर इशारा कर सकते हैं, जो एक चालू Python सर्वर के भीतर एक इंटरैक्टिव Python इंटरप्रेटर प्रदान करने के लिए एक प्रोग्रामेटिक SSH कार्यान्वयन जिसे conch कहा जाता है का उपयोग करता है, या ssh-chat, एक SSH सर्वर जो नियमित SSH शेल कार्यक्षमता के बजाय एक चैट रूम प्रदान करता है। TCP अग्रेषण के लिए भी नवीन उपयोगों की कल्पना की जा सकती है।
प्रोग्रामेटिक SSH प्रदान करने का एक और अच्छा कारण यह है कि सेवाओं के लिए कमांड चलाने वाले तरीके से अन्य सेवाओं के साथ बातचीत करना असामान्य नहीं है। जबकि Process इसे स्थानीय उपयोग-मामले के लिए हल करता है, कभी-कभी जिन कमांडों को लागू करने की आवश्यकता होती है वे दूरस्थ होते हैं। जबकि Process इस आह्वान को चलाने के लिए एक उप-प्रक्रिया के रूप में एक ssh क्लाइंट लॉन्च कर सकता है, SSH को सीधे कॉल करना काफी अधिक सीधा हो सकता है। यह libssh2 का लक्षित उपयोग-मामला है। SwiftNIO SSH libssh2 के नेटवर्किंग और क्रिप्टोग्राफ़िक परत के समतुल्य प्रदान करता है, जिससे प्रेरित उपयोगकर्ता सीधे Swift सेवाओं के भीतर SSH सत्र चला सकते हैं।
SwiftNIO SSH के सबसे हाल के संस्करण Swift 5.9 और नए का समर्थन करते हैं। SwiftNIO SSH रिलीज़ द्वारा समर्थित न्यूनतम Swift संस्करण नीचे विस्तृत हैं:
| SwiftNIO SSH | न्यूनतम Swift संस्करण |
|---|---|
0.0.0 ..< 0.3.0 | 5.1 |
0.3.0 ..< 0.4.0 | 5.2 |
0.4.0 ..< 0.5.0 | 5.4 |
0.5.0 ..< 0.6.2 | 5.5.2 |
0.6.2 ..< 0.9.0 | 5.6 |
0.9.0 ..< 0.9.2 | 5.8 |
0.9.2 ..< 0.10.0 | 5.9 |
0.10.0 ... 0.12.0 | 5.10 |
0.12.0 ..< 0.13.0 | 6.0 |
0.13.0 ..< | 6.1 |
SwiftNIO SSH निम्नलिखित फीचर सेट के साथ SSHv2 का समर्थन करता है:
SwiftNIO SSH एक SwiftNIO ChannelHandler, NIOSSHHandler प्रदान करता है। यह हैंडलर SSH प्रोटोकॉल के अधिकांश भाग को सीधे लागू करता है। उपयोगकर्ताओं से SSH संदेशों को सीधे उत्पन्न करने की अपेक्षा नहीं की जाती है: इसके बजाय, वे चाइल्ड चैनलों और डेलीगेट्स के माध्यम से NIOSSHHandler के साथ बातचीत करते हैं।
SSH एक मल्टीप्लेक्स्ड प्रोटोकॉल है: प्रत्येक SSH कनेक्शन को कई द्विदिश संचार चैनलों में विभाजित किया जाता है, जिन्हें उचित रूप से चैनल कहा जाता है। SwiftNIO SSH एक "चाइल्ड चैनल" अमूर्तता का उपयोग करके इस निर्माण को प्रतिबिंबित करता है। जब कोई पीयर एक नया SSH चैनल बनाता है, तो SwiftNIO SSH एक नया NIO Channel बनाएगा जो उस SSH चैनल पर सभी ट्रैफ़िक का प्रतिनिधित्व करने के लिए उपयोग किया जाता है। इस चाइल्ड Channel के भीतर सभी ईवेंट एक दूसरे के सापेक्ष सख्ती से क्रमबद्ध होते हैं: हालाँकि, विभिन्न Channels में ईवेंट को कार्यान्वयन द्वारा स्वतंत्र रूप से इंटरलीव किया जा सकता है।
इसलिए एक सक्रिय SSH कनेक्शन इस तरह दिखता है:
┌ ─ NIO Channel ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
│ ┌────────────────────────────────┐ │
│ │
│ │ │ │
│ │
│ │ │ │
│ NIOSSHHandler │───────────────────────┐
│ │ │ │ │
│ │ │
│ │ │ │ │
│ │ │
│ └────────────────────────────────┘ │ │
│
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ │
│
│
│
│
▼
┌── SSH Child Channel ─────────────────────────────────────────────────────────────┐
│ │
│ ┌────────────────────────────────┐ ┌────────────────────────────────┐ ├───┐
│ │ │ │ │ │ │
│ │ │ │ │ │ ├───┐
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ User Handler │ │ User Handler │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ └────────────────────────────────┘ └────────────────────────────────┘ │ │ │
│ │ │ │
└───┬──────────────────────────────────────────────────────────────────────────────┘ │ │
│ │ │
└───┬──────────────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
एक SSH चैनल को एक चैनल प्रकार के साथ आह्वान किया जाता है। NIOSSH तीन का समर्थन करता है: session, directTCPIP, और forwardedTCPIP। सबसे आम चैनल प्रकार session है: session का उपयोग किसी प्रोग्राम के आह्वान का प्रतिनिधित्व करने के लिए किया जाता है, चाहे वह कोई विशिष्ट नामित प्रोग्राम हो या शेल। अन्य दो चैनल प्रकार TCP पोर्ट अग्रेषण से संबंधित हैं, और बाद में चर्चा की जाएगी।