क्या .ssh / config होस्ट में कई HostName प्रविष्टियाँ हो सकती हैं?


10

मैंने सेटअप ssh और राउटर पोर्ट को अग्रेषित किया है ताकि मैं अपने होम नेटवर्क पर एक कंप्यूटर में ssh कर सकूं जब मैं घर पर नहीं हूं। वर्तमान में मेरी .ssh/configफ़ाइल में दो प्रविष्टियाँ हैं , जब मैं अपने होम नेटवर्क पर हूँ और एक जब मैं नहीं हूँ:

Host mycomputer
  HostName 192.168.X.X

Host mycomputerathome
  HostName my.no-ip.dynamic

यह काम करता है लेकिन मैं सोच रहा हूं कि क्या मैं खुद को आसान बना सकता हूं। मैं उम्मीद कर रहा था कि कई HostName प्रविष्टियों को सूचीबद्ध करने का एक तरीका है जैसे कि यदि पहली बार विफल हो जाता है तो यह दूसरे पर वापस आ जाता है:

Host mycomputer
  HostName 192.168.X.X
  HostName my.no-ip.dynamic

ताकि यह पहले मेरे स्थानीय नेटवर्क पर एक होस्ट से कनेक्ट करने की कोशिश करे और अगर वह मौजूद नहीं है, तो यह मेरे नो-आईपी डायनामिक होस्ट नाम का उपयोग करके कनेक्ट करने का प्रयास करेगा। मैंने दो HostNames में प्रवेश करने की कोशिश की है, लेकिन ssh mycomputerकुछ भी नहीं कर रहा है।

मैंने कुंजियों के पक्ष में पासवर्ड प्रमाणीकरण को बंद कर दिया है, इसलिए गलती से स्थानीय नेटवर्क पर कंप्यूटर से कनेक्ट होने पर जब मैं अपने होम नेटवर्क पर नहीं हूं, तो मुझे अपना पासवर्ड कहीं भी नहीं जाना चाहिए।

यदि पहला काम नहीं करता है, तो क्या यह कोशिश करेगा कि होस्टनाम को निर्दिष्ट किया जाए?


unix.stackexchange.com/questions/424755/… समान है और शायद पोर्ट के बजाय होस्टनाम के लिए अनुकूलित किया जा सकता है
थ्रिल

BTW, .ssh/configकुछ संपत्तियों के लिए स्क्रिप्ट चला सकते हैं। मुझे पता है कि आप ProxyCommand के साथ कर सकते हैं। आप इस प्रश्नोत्तर में दिखाए गए कुछ को SF - serverfault.com/questions/401233/… से कर सकते हैं
स्लम

जवाबों:


8

यह बदसूरत है, लेकिन मुझे लगता है कि आप इसे पोर्ट नॉक की निकास स्थिति जैसे मानदंड का उपयोग करके कर सकते हैंexecMatch

Host mycomputer
  Match exec "nc -z 192.168.1.11 %p"
    HostName 192.168.1.11
  Match !exec "nc -z 192.168.1.11 %p"
    HostName my.no-ip.dynamic

ध्यान दें कि यह वास्तव में नहीं बता सकता है कि क्या आप "अपने" होम नेटवर्क पर हैं - बस आप एक निजी लैन सेगमेंट पर उसी एड्रेस रेंज के साथ हैं जो उसी पते / पोर्ट पर सुनने वाली सेवा के लिए होता है।


1
मुझे जोड़ना था -w 1या ncहमेशा के लिए इंतजार करना प्रतीत होता है। जो आसान हो सकता है वह दूसरा मैच हो सकता है Match exec "true"क्योंकि अगर पहला मैच विफल हो गया, तो बस दूसरे विकल्प पर आंख मूंदकर प्रयास करें।
कोरी ओगबर्न

@CoreyOgburn आह हाँ मैं वैकल्पिक स्थिति (दया Matchनहीं है Else) करने के लिए एक अच्छा तरीका सोचने की कोशिश कर रहा था
Steeldriver

इसलिए मैं इस दृष्टिकोण के साथ एक मुद्दे में भाग गया। मैं एक साइट भी चलाता हूं, xyz.com का कहना है, और जब मैंने ssh xyz.comअपने Match exec "true"पकड़े जाने की कोशिश की और अपने रिमोट होस्टनाम का उपयोग करके मुझे अपने होम सर्वर में पुनर्निर्देशित किया। मैं आपके अमल के साथ कोशिश करूंगा लेकिन मुझे लगता है कि वही होगा।
कोरी ओगबर्न

हाँ, आपके उपयोग Match exec... Match !execसे अन्य डोमेन के लिए ssh'ing हो रहा है जिससे Match !execहोस्टनाम को फिर से लिखना और फिर से लिखना है।
कोरी ओगबर्न

2
तो यह पता चला है कि ~/.ssh/configखरोज के बारे में कम परवाह नहीं कर सकता। कुछ कमांड्स स्कोप को रीसेट करते हैं, अर्थात प्रत्येक नई होस्ट लाइन कहती है "पिछली लाइनें पिछली होस्ट के लिए थीं, निम्नलिखित लाइनें इस नए होस्ट के लिए हैं।" टर्न आउट Matchमें होस्ट के समान "स्कोप रीसेटिंग" पावर है। इसके लिए, मैंने अपनी होस्ट लाइन को Match Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"अपने स्थानीय नेटवर्क के सभी कस्टम मानों के साथ बदल दिया । फिर मैंने एक मेल लाइन को छोड़कर !execजब मैंने नेटवर्क बंद किया तो सभी मान जोड़े। अब यह सभी मेजबानों के लिए ठीक काम करता है।
कोरी ओगबर्न

2

मैं इस तरह का उपयोग कर रहा हूं।

Match host mycomputer exec "nc -G 1 -z 192.168.1.11 %p"
    HostName 192.168.1.11
Match host mycomputer # fallback
    HostName my.no-ip.dynamic
Host mycomputer
    # ... other configs

Host not-my-computer
# ... other configs

ssh_config में इंडेंटेशन ब्लॉक जैसा कुछ नहीं है। यदि आप एक विशिष्ट होस्ट के लिए मैच की सजा को सीमित करना चाहते हैं, तो आपको पूरी स्थिति का वर्णन करना चाहिए।

आप ncइसे -G 1(कनेक्शन टाइमआउट 1s) विकल्प देकर लंबे समय तक प्रतीक्षा करने से बच सकते हैं, और कई आह्वान से बचने के लिए आप निम्न व्यवहार का उपयोग कर सकते हैंnc

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

https://www.freebsd.org/cgi/man.cgi?sshd_config(5)


1

नहीं; यदि आप HostNameएक Hostप्रविष्टि के लिए कई एस निर्दिष्ट करते हैं , तो केवल पहले स्वीकार किया जाएगा:

$ grep -A5 Host .ssh/config
Host test
   HostName fake.tld.xyzzy
   HostName real.example.com
   HostName 127.1.2.3
   User username
$ ssh test
ssh: Could not resolve hostname fake.tld.xyzzy: Name or service not known

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