गेटवे सर्वर जंप बैशन होस्ट लोकल सेटअप


0

मैं एक मध्यवर्ती (गढ़, कूद, प्रवेश द्वार) सर्वर का उपयोग कर एक दूरस्थ निजी होस्ट के लिए ssh करना चाहता हूं। यह आदेश ठीक काम करता है:

ssh gateway ssh private

इसके साथ ~ / .ssh / config सेटअप:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

मैं इसे अपने ~ / .ssh / config में कैसे लागू कर सकता हूं? मैंने ProxyCommand के कई पुनरावृत्तियों को बिना किसी भाग्य के आज़माया है। मैं निजी होस्ट तक पहुंचने के लिए गेटवे होस्ट पर स्थित पहचान फ़ाइल का उपयोग करना चाहता हूं। मैं ऐसा करने में सक्षम होना चाहता हूं:

ssh private

मैं यहाँ वर्णित तकनीक से अवगत हूँ, लेकिन इसके लिए मेरी निजी कुंजी सभी निजी मेजबानों पर होनी चाहिए, लेकिन मैं ऐसा नहीं चाहता:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

जवाबों:


0

सबसे पहले, गेटवे पर अपनी ssh कुंजियों को कॉन्फ़िगर करें ताकि आप प्राइवेट में ssh कर सकें। फिर अपने क्लाइंट पर, एक अलग निजी / सार्वजनिक कुंजी जोड़ी बनाएं जिसे आप गेटवे पर प्रमाणित करने के लिए उपयोग करते हैं। जैसे ssh-keygen -t rsa -f id_gateway

फिर गेटवे पर, command=अपने अधिकृत_की फ़ाइल में सिंटैक्स का उपयोग करें । उदाहरण के लिए, आपकी प्रविष्टि इस तरह दिख सकती है:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

command="command"अधिक जानकारी के लिए sshd मैनपेज खोजें । इस पंक्ति में id_gateway.pub कुंजी जोड़ना सुनिश्चित करें। फिर .ssh/configअपने क्लाइंट में, इस तरह एक प्रविष्टि जोड़ें:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

अब, अपने ग्राहक से आप में सक्षम होना चाहिए ssh privateऔर सीधे मिलता है। यह भी के लिए काम करता है scpऔर sftp

अतिरिक्त श्रेय

यदि आप इसे कई सर्वरों के लिए उपयोग करना चाहते हैं, लेकिन केवल एक सार्वजनिक कुंजी को गेटवे पर प्रबंधित करना चाहते हैं, तो आप निम्न चाल का उपयोग कर सकते हैं। sshdडिफ़ॉल्ट रूप से केवल कुछ चर स्थानीय वातावरण से प्राप्त करने की अनुमति देता है। इनमें से एक है LC_PAPERजो शायद ही किसी भी चीज के लिए उपयोग किया जाता है। इसलिए हम सर्वर के होस्टनाम को पास करने के लिए इसका उपयोग कर सकते हैं:

सबसे पहले, सार्वजनिक कुंजी प्रविष्टि को इसमें बदलें

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

फिर अपने क्लाइंट पर, अपनी .bashrcफ़ाइल में एक फ़ंक्शन जोड़ें (या जो भी शेल आप उपयोग करते हैं) जो इस तरह दिखता है:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

यदि आप चाहते हैं तो एक उपनाम बनाएं:

alias ssh=ssh_proxy

अंत में, ऊपर दिखाए गए Hostहिस्से की .ssh/configतरह अपने अनुभाग जोड़ें । उदाहरण के लिए:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

अब तुम क्या करने में सक्षम होना चाहिए ssh privateऔर ssh private2प्रवेश द्वार पर सिर्फ एक सार्वजनिक कुंजी के साथ।


यह सही लाइनों के साथ है। मैं कई निजी होस्टों के लिए SSH कैसे कर सकता हूं और केवल 1 सार्वजनिक कुंजी गेटवे पर संग्रहीत है? क्या अनुरोध किए गए होस्टनाम में पास होने का कोई तरीका है?
शॉन

मैंने उस पते पर अपना उत्तर अपडेट कर दिया।
गोगेटर्स

क्या इसे .ssh / config फाइल में निहित रखने का कोई तरीका है। इसके अलावा, यह आदर्श होगा यदि मेजबान एकल प्रविष्टि साझा कर सकते हैं।
शॉन

नहीं। आप env चर नहीं डाल सकते हैं .ssh/config। आप बस मैन्युअल रूप से चला सकते हैं LC_PAPER=private ssh private। यदि आप Host *अंत में एक ब्लॉक का उपयोग करते हैं तो आपको .ssh/configकेवल 1 प्रविष्टि की आवश्यकता होगी। BTW, तुम सिर्फ कई निजी / सार्वजनिक कुंजी क्यों नहीं कर सकते? यह बहुत आसान होगा।
गोगेटर्स

मुझे इस तरह से काम करने के लिए scp: scp_proxy () {LC_PAPER = echo "$1" | cut -f1 -d":"/ usr / bin / scp $ *} उर्फ ​​scp = scp_proxy
शॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.