विधि 1 (अंतर पर ssh-key का उपयोग करें)
यदि आप प्रमाणीकरण प्रवाह को बनाए रखना चाहते हैं
local -- authenticate --> inter -- authenticate (ask password) --> final
यह .ssh / config प्रॉक्सीहोस्ट के साथ नहीं किया जा सकता है।
आपको जो चाहिए वह है bash shell alias (मुझे आशा है कि आप bash का उपयोग कर रहे हैं)।
में ~/.bashrc
, निम्न पंक्ति जोड़ें
alias ssh-final='ssh -t inter ssh user2@final.com'
कमांड प्रॉम्प्ट में, बस निम्नलिखित टाइप करें
ssh-final
final
में अनुभाग का ~/.ssh/config
उपयोग नहीं किया गया है।
कनेक्शन विवरण (1)
ssh -t inter ssh user2@final.com
अनुसरण के रूप में देखा जा सकता है
local# ssh inter
inter# ssh user2@final.com
local
केवल "बात" कर रहा है inter
। local
और के बीच कोई प्रत्यक्ष या अप्रत्यक्ष ssh कनेक्शन नहीं है final
। local
बस के उत्पादन को प्रदर्शित कर रहा है ssh user2@final.com
।
METHOD 2 (स्थानीय पर ssh-key का उपयोग करें)
उसी ssh- कुंजी के साथ प्रमाणीकरण
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
के लिए स्थानीय कॉपी ~/.ssh/id_ras.pub
करें
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
कनेक्शन विवरण (2)
ssh टनलिंग
इससे पहले कि हम विस्तार में जाएं ProxyCommand
, निम्नलिखित उदाहरण देखें
चरण 1, टर्मिनल विंडो 1 पर
local# ssh inter -L 2000:final.com:22
चरण 2, टर्मिनल विंडो 2 पर
local# ssh localhost -p 2000
टर्मिनल 1 में, एक पोर्ट लोकल पोर्ट 2000 और फ़ाइनल.कॉम पोर्ट 22 के बीच सेटअप है। लोकल पोर्ट 2000 को भेजी जाने वाली कोई चीज़ फ़ाइनल.कॉम पोर्ट 22 और इसके विपरीत होगी।
टर्मिनल 2 में, ssh लोकल पोर्ट 2000 से कनेक्ट होता है, लेकिन वास्तव में अंतिम.कॉम पोर्ट 22 के साथ संचार कर रहा है, जो sshd है।
टनलिंग के साथ, चरण 2 में स्थानीय ssh क्लाइंट को सीधे final.com sshd के साथ जोड़ा जाता है।
स्थानीय बंदरगाह 2000 का "आउटपुट", "कच्चा" ssh डेमन ट्रैफिक है।
ऐसी सुरंग का सामान्य उपयोग आंतरिक वेब सर्वर या ईमेल सर्वर तक पहुंच बनाने के लिए है। वेब सर्वर के लिए उदाहरण निम्नलिखित है
local# ssh inter -L 2000:final.com:80
ब्राउज़र में निम्न URL का उपयोग करें
http://localhost:2000
सुरंग के दो अंतिम बिंदु स्थानीय पोर्ट 2000, और अंतिम.कॉम पोर्ट 80 हैं।
सुरंग के अंदर और बाहर आने वाला ट्रैफ़िक "AS IS" है। चलो कि "कच्चे" यातायात कहते हैं।
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
ProxyCommand
यह एक कदम आगे ले लो। यह एक स्थानीय पोर्ट बनाने और उससे कनेक्ट करने के चरण को छोड़ देता है।
एक ssh क्लाइंट निष्पादित करेगा जो कभी भी कमांड देता है ProxyCommand
, और उस कमांड के आउटपुट को "रॉ" ट्रैफ़िक के रूप में मानता है। यह स्थानीय अंत बिंदु पर पकड़ है, और फिर इसके साथ एक ssh कनेक्शन शुरू करें।
एक काम दूसरे का क्यों नहीं?
निम्नलिखित आदेश
ssh inter nc final.com 22
मूल रूप से मतलब (1) से कनेक्ट होता है inter
, फिर (2) पर inter
, कमांड चलाते हैं nc final.com 22
।
nc - arbitrary TCP and UDP connections and listens
तो nc final.com 22
अंतिम.com पोर्ट 22 से जुड़ जाएगा, स्टडआउट के लिए आने वाले सभी ट्रैफ़िक का प्रिंट आउट लें, और सभी स्टड को दूसरी तरफ भेजें। यह nc stdin / out और final.com port 22 के बीच एक "सुरंग" है।
चूँकि nc
ssh सत्र के भीतर चलाया गया है, इसके सभी स्टडआउट को ssh क्लाइंट को "रॉ" ट्रैफ़िक के रूप में वापस पास किया जाता है। और ssh क्लाइंट nc stdin में ट्रैफ़िक पास कर सकता है, जो कि अंतिम.कॉम पोर्ट 22 पर समाप्त हो जाएगा।
उपरोक्त "सुरंग" के माध्यम से, स्थानीय ssh क्लाइंट final.com
सीधे ssh सत्र शुरू करेगा ।
निम्नलिखित आदेश
ssh -t inter ssh user2@final.com
के साथ काम नहीं करता है ProxyCommand
क्योंकि इसमें से एक ssh डेमॉन से "कच्चा" ट्रैफ़िक नहीं है। यह एक ssh क्लाइंट का स्टडआउट है । क्लाइंट से क्लाइंट की बात का मतलब है कोई बिजनेस नहीं।
अलग ssh- कुंजी (ओपी मूल विन्यास) के साथ प्रमाणीकरण
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
के लिए स्थानीय कॉपी ~/.ssh/id_ras.pub
करें
/home/user1/.ssh/authorized_keys in `inter`
के लिए स्थानीय कॉपी ~/.ssh/id_ras_2.pub
करें
/home/user2/.ssh/authorized_keys in `final`
उपरोक्त दोनों ही निम्नलिखित उपयोग को सक्षम करेंगे
local# ssh final
अतिरिक्त जाँच
क्रिया का प्रयोग करें
local# ssh -v final
कि ssh समस्या की पहचान करने में मदद करनी चाहिए।
जाँच करें एन.सी.
ProxcyCommand
पर अमल nc
कर रहा है inter
। जांचें कि nc
क्या वास्तव में उपलब्ध है inter
।
local# ssh inter
inter# nc final.com 22
जाँच करें rsa कुंजी सेटअप ठीक से है
यदि विभिन्न कुंजियों का उपयोग किया जाना है inter
और final
, स्थानीय मशीन में निम्नलिखित फाइलें मौजूद होनी चाहिए
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
चूँकि आप inter
पहले से ही ssh कर सकते हैं , कुंजी सेटअप की जाँच करें final
। अपनी स्थानीय मशीन से
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
आपको id_rsa_2.pub
वहां की सामग्री देखनी चाहिए ।
ssh -t
, लेकिन मैं जो करना चाहता हूं वह उस व्यवहार का अनुकरण करना है जो मैंनेssh -t
केवल कॉन्फ़िगरेशन का उपयोग करके उपयोग किया है.ssh/config
।