फ़ायरवॉल के पीछे दूसरे सर्वर से कनेक्ट करने के लिए, सिद्धांत दो सिद्धांत हैं।
मूर्ख व्यक्ति को पहले सर्वर (एक निष्पादन चैनल से) पर ssh
पर कॉल करना होगा, जो सही सर्वर को इंगित करता है। इसे जेएसएच के साथ एजेंट अग्रेषण की आवश्यकता होगी, और दूसरे सर्वर तक पहुंचने के लिए जेएसएच एपीआई भी प्रदान नहीं करेगा, केवल एसएसएच कमांड लाइन।
बेहतर एक टीसीपी सुरंग बनाने के लिए पहले सर्वर से कनेक्शन का उपयोग करना होगा, और दूसरे सर्वर से कनेक्ट करने के लिए इस सुरंग का उपयोग करना होगा। जेएसएच विकी में ProxySSH class (कुछ उदाहरण कोड के साथ) शामिल है जो एक जेएसएच सत्र का उपयोग दूसरे जेएसएच सत्र के लिए सुरंग के रूप में करने की अनुमति देता है। (अस्वीकरण: यह वर्ग मेरे द्वारा मुख्य रूप से लिखा गया था, JSch लेखक की ओर से कुछ समर्थन के साथ।)
जब आप दूसरे सर्वर से अपना कनेक्शन, या तो एक shell
चैनल या अपने आदेश पर अमल करने के लिए exec
चैनलों की एक श्रृंखला का उपयोग करें। (JSch विकी में Shell, Exec or Subsystem Channel देखें अवलोकन करने के लिए, और जानकारी के लिए Javadocs।)
अपने अज्ञात मेजबान कुंजी समस्या के लिए:
सुरक्षित संस्करण सभी एकत्र करने के लिए किया जाएगा मेजबान कुंजी (एक सुरक्षित तरीके से) पहले और ज्ञात_होस्ट फ़ाइल में डाल दें। (यदि आप केवल उस कुंजी पर भरोसा करते हैं जो आपको प्रस्तुत किया जाता है, तो आप एक मध्यम-बीच-मध्य हमले के प्रति संवेदनशील हैं। यदि इन्हें आपके नेटवर्क में कोई चिंता नहीं है, क्योंकि यह शारीरिक रूप से सुरक्षित है, आपके लिए अच्छा है।)
सुविधाजनक संस्करण configuration optionStrictHostKeyChecking
no
को स्थापित कर रही है - इस होस्ट कुंजी के लिए अज्ञात मेजबान कुंजी जोड़ देगा दायर:
JSch.setConfig("StrictHostKeyChecking", "no");
(आप भी इसे अलग-अलग सत्र पर, सेट कर सकते हैं यदि आप केवल सुरंग सत्र के लिए इसे सेट करना चाहते हैं, न कि सुरंग सत्र के लिए। या yes
या ask
के साथ सुरंग सत्र के लिए इसे ओवरराइड करें - वहां एमआईटीएम खतरे अधिक हो सकता है।)
ए मध्यम मार्ग वास्तव में उपयोगकर्ता से पूछने में सक्षम होना चाहिए (जिसके बाद फिंगरप्रिंट की तुलना किसी सूची में करनी चाहिए) - इसके लिए, UserInfo
इंटरफ़ेस को कार्यान्वित करें और ऑब्जेक्ट को सत्र में प्रदान करें। (JSch विकी एक example implementation using Swing JOptionPanes होता है, यदि आपके क्लाइंट के कार्यक्रम जीयूआई के साथ एक सिस्टम पर चलता है जो आप बस का उपयोग कर सकते हैं।)
स्वीकार किए जाते हैं मेजबान चाबियों का बचत काम करने के लिए, आप एक फ़ाइल नाम तर्क के साथ JSch.setKnownHosts
विधि का उपयोग करना चाहिए , एक इनपुटस्ट्रीम तर्क के साथ नहीं - अन्यथा आपके स्वीकार करने के लिए आपके ग्राहक के प्रत्येक पुनरारंभ के लिए दोहराया जाना होगा।
बढ़िया काम करता है! क्या मैं उस गेटवे के पीछे दो या दो से अधिक विभिन्न एसएसएच सर्वरों तक पहुंचने के लिए एक ही गेटवे का उपयोग कर सकता हूं? –
एनवीएम, हाँ आप कर सकते हैं। –
@ मार्टिन: हाँ, मैंने इसे इस तरह इस्तेमाल किया है (लगभग एक ही गेटवे के पीछे छिपे हुए 23 सर्वर तक पहुंचने के लिए)। –