सुरंग के माध्यम से id_rsa के साथ ssh config फाइल सेट करना


17

मैं दूसरी मशीन के साथ एक कनेक्शन को खोलने के लिए एक वैध कॉन्फ़िगरेशन सेट करने के लिए संघर्ष कर रहा हूं, एक दूसरे से गुजर रहा हूं, और तीसरी मशीन से कनेक्ट करने के लिए एक id_rsa (जो मुझसे एक पासवर्ड का अनुरोध करता हूं) का उपयोग कर रहा हूं।

मैंने इस प्रश्न को एक अन्य फोरम में पूछा है, लेकिन मुझे कोई जवाब नहीं मिला है जिसे बहुत उपयोगी माना जा सकता है।

समस्या, बेहतर वर्णित है, इस प्रकार है:

Local machine: user1@localhost
Intermediary machine: user1@inter
Remote target: user2@final

मैं छद्म tty का उपयोग कर पूरे कनेक्शन करने में सक्षम हूँ:

ssh -t inter ssh user2@final

(यह मुझसे पूछेगा id_rsa फ़ाइल के लिए पासवर्ड जो मेरे पास मशीन "इंटर" में है)

हालाँकि, चीजों को गति देने के लिए, मैं अपनी .ssh / config फाइल सेट करना चाहूंगा, ताकि मैं बस "मशीन" से जुड़ सकूं:

ssh final

मुझे अब तक क्या मिला है - जो काम नहीं करता है - है, मेरे .ssh / config फाइल में:

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

Id_rsa फ़ाइल को मध्य मशीन से कनेक्ट करने के लिए उपयोग किया जाता है (इसके लिए मुझे कोई पासवर्ड टाइपिंग की आवश्यकता नहीं है), और id_rsa_2 फ़ाइल का उपयोग मशीन "फाइनल" (यह एक पासवर्ड का अनुरोध करता है) से कनेक्ट करने के लिए किया जाता है।

मैंने कुछ LocalForwardऔर / या RemoteForwardफ़ील्ड्स को मिलाने की कोशिश की है , और पहले और दूसरे दोनों मशीनों में id_rsa फाइलें डाल दी हैं, लेकिन मैं बिना किसी कॉन्फ़िगरेशन के सफल नहीं हो पाया।

पुनश्च: जिस धागे से मैंने कुछ मदद लेने की कोशिश की है:

http://www.linuxquestions.org/questions/linux-general-1/proxycommand-on-ssh-config-file-4175433750/

जवाबों:


21

विधि 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केवल "बात" कर रहा है interlocalऔर के बीच कोई प्रत्यक्ष या अप्रत्यक्ष ssh कनेक्शन नहीं है finallocalबस के उत्पादन को प्रदर्शित कर रहा है 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 के बीच एक "सुरंग" है।

चूँकि ncssh सत्र के भीतर चलाया गया है, इसके सभी स्टडआउट को 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
रुबेंस

कॉन्फिग फाइल, यहां तक ​​कि आपके द्वारा पोस्ट की गई एक भी काम करना चाहिए। checkingकदम से गुजरने की कोशिश करो । कोई चीज गायब / गलत होनी चाहिए।
जॉन सियु

1
के साथ ssh -t, आपके ssh से finalआरंभ किया जाता है inter, जो local# ssh interतब तक लगभग "समान" होता है inter# ssh final। प्रमाणीकरण के बीच interऔर है final। प्रॉक्सी / एनसी के साथ, आपके ssh को अंतिम रूप से आपकी स्थानीय मशीन से सुरंग के माध्यम से शुरू किया जाता है final। प्रमाणीकरण के बीच localऔर है final
जॉन सियु

@ आपकी टिप्पणी के आधार पर, मुझे लगता है कि आप गलत समझ रहे हैं कि आप अभी भी interप्रमाणित करने के लिए ssh-key का उपयोग कर रहे हैं final। ~ / .Ssh / id_rsa_2 id_rsa_2में प्रतिलिपि बनाने का प्रयास करें local(कभी भी स्थानीय id_rsa पर न जाएं) और आपकी समस्या शायद चली गई।
जॉन सिउ

2
ध्यान दें कि ssh2 ने ncबनाया है। इसके बजाय ProxyCommand ssh gateway nc %h %p, आप लिखेंगे ProxyCommand ssh inter -W %h:%p
user123444555621

2

मुझे वास्तव में सूचीबद्ध या ssh -v स्टेटमेंट्स में कोई त्रुटि नहीं दिखाई दी, जो यह देखने में मदद करेगी कि यह कहां लटका हुआ है।

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

यदि आपके पास ubuntu (जैसे आपकी स्थानीय मशीन पर) एक आधुनिक / उपयोगकर्ता-अनुकूल ओएस है, तो यह बिना किसी * मालिश * के बिना कोई समस्या नहीं होनी चाहिए। मैंने जानबूझकर पहचान फ़ाइल को छोड़ दिया, आपको इसकी आवश्यकता नहीं होगी।

आपकी कॉन्फ़िग फ़ाइल इस तरह दिखाई देगी:

Host inter
    User user1
    ForwardAgent yes
    HostName inter.com

Host final
    ForwardAgent yes
    User user2
    HostName final.com
    ProxyCommand ssh inter nc %h %p

यदि ऐसा नहीं होता है, तो इन चरणों के माध्यम से सुनिश्चित करें कि आप ssh- एजेंट चला रहे हैं:

'ssh-add -l' (lower case L) will list your private keys if any are loaded, or will be blank, or will say can’t connect to ssh-agent, if so, start ssh-agent.
'eval `ssh-agent`' (those are backticks) starts ssh agent
'ssh-add' will add your key… you can add a path argument if you have a key in a non-default area. At this point you will enter your passphrase.

यहाँ यह कैसे काम करता है, यह बताते हुए एक अच्छा मार्गदर्शक है।

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