Ssh config में एकाधिक समान प्रविष्टियाँ


193

कहो मैं sshअपनी .ssh configफ़ाइल में एक ही सेटअप के साथ 30 सर्वर के लिए अपने विकल्पों को कॉन्फ़िगर करना चाहता हूं :

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

जहां केवल एक चीज है जो इन 30 मशीनों के बीच बदलती है XXX

मेरी configफ़ाइल में उपरोक्त संरचना को 30 बार दोहराने के बजाय , क्या मशीनों की एक श्रृंखला को परिभाषित करने का एक और तरीका है?

जवाबों:


232

से ssh_config(5)आदमी पेज:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

इसलिए:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
ऐसा लगता है कि यह %hफीचर ओपनएसएसएच के 5.6 में प्रदर्शित हुआ । मैं सोच रहा था कि मैंने इसे पहले क्यों नहीं देखा - डेबियन स्क्वीज़ में संस्करण 5.5 है।
jw013

2
यदि आप किसी पुराने OS पर हैं या आपको ऐसे नियमों की आवश्यकता नहीं है config, जिसमें आप हमेशा एक सरल स्क्रिप्ट लिख सकते हैं जो आपके लिए जनरेट करता है config
रोजर डाहल

69

सेटअप कम करने के लिए आप एक हो सकता है .ssh/configइस तरह

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ...Host *यदि प्रत्येक होस्ट में निम्न कॉन्फ़िगरेशन हो, तो उसे प्रतिस्थापित किया जा सकता है


2
यह एकमात्र ऐसा उत्तर प्रतीत होता है जो वास्तव में ओपी (और स्वयं) की मदद करता है।
मैड फिजिसिस्ट

प्राथमिकता क्रम क्या है? क्या यह केवल फ़ाइल में बाद में परिभाषित की गई सामग्री है जो फ़ाइल में पहले से परिभाषित सामग्री को ओवरराइड करती है? जैसे कि "होस्ट X01" के तहत मेरे पास "कम्प्रेशन नं" था, क्या तब "होस्ट X01 X02" के तहत "कम्प्रेशन यस" द्वारा ओवरराइड किया जाएगा?
बेन किसान

1
Ssh_config मैनुअल से: चूंकि प्रत्येक पैरामीटर के लिए पहले प्राप्त मूल्य का उपयोग किया जाता है, फ़ाइल की शुरुआत के पास अधिक मेजबान-विशिष्ट घोषणाएं दी जानी चाहिए, और अंत में सामान्य चूक।
गिलियूम विंसेंट

Host X01 X02 ...द्वारा प्रतिस्थापित किया जा सकता है *.YYY.com? अगर यह काम करता है तो थोड़ा अधिक प्रबंधनीय लगता है।
माइकल

51

बस उपयोग करें *

देखें man ssh_config:

पैटर्न एक पैटर्न में शून्य या अधिक गैर-व्हाट्सएप वर्ण होते हैं, '*' (एक वाइल्डकार्ड जो शून्य या अधिक वर्णों से मेल खाता है), या '?' (एक वाइल्डकार्ड जो बिल्कुल एक वर्ण से मेल खाता है)। उदाहरण के लिए, डोमेन के ".co.uk" सेट में किसी भी होस्ट के लिए घोषणाओं का एक सेट निर्दिष्ट करने के लिए, निम्नलिखित पैटर्न निम्न हो सकते हैं:

       Host *.co.uk

 The following pattern would match any host in the 192.168.0.[0-9] network range:

       Host 192.168.0.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"

धन्यवाद! ऐसा लगता है कि मुझे क्या चाहिए, लेकिन मुझे अभी भी समझ में नहीं आया कि इसे मेरे मामले में कैसे अनुकूलित किया जाए। क्या मैं प्रश्न चिह्न का उपयोग करता ?हूं जहां भी मैं चाहता हूं कि यह *संकेत द्वारा मिलान किए गए पैटर्न द्वारा प्रतिस्थापित किया जाए ?
अमीलियो वाज़केज़-रीना

2
हम्म। मुझे लगता है कि पैटर्न को मेरी ज़रूरत से अलग उद्देश्य प्राप्त होता है। वे एक ही configप्रविष्टि के लिए कई प्रश्नों को पुनर्निर्देशित करते हैं , लेकिन होस्ट के पैरामीटर तय किए गए हैं (यानी पैटर्न का उपयोग मापदंडों को टेम्पलेट करने के लिए नहीं किया जा सकता है )। क्या मै गलत हु?
अमेलियो वाज़केज़-रीना

4
@ user27915816 हाँ, आप सही हैं, जहाँ तक मुझे पता है "टेम्प्लेट" करने का कोई तरीका नहीं है। आप जो सबसे अच्छा कर सकते हैं वह निरंतर लाइनों को एक Host *प्रविष्टि में अलग करना है , और प्रत्येक के लिए एक अलग प्रविष्टि Host XXXहै जिसमें केवल अलग-अलग हिस्से होते हैं (यानी Hostname XXX.YYY.ZZZलाइन)।
jw013

यह पृष्ठ अब (अभी के लिए) जब Googling "ssh config वाइल्डकार्ड" है, तो इस सवाल का जवाब देने वाले उत्तर देने के लिए धन्यवाद।
19

9

इग्नासियो वाज़केज़-अब्राम्स और एच-डर्क शमिट के उत्तरों से, निम्नलिखित को .sh / config में जोड़ा जा सकता है।

HOST XXX*
    HostName %h.YYY.com
    User myname

और फिर, उदाहरण के लिए, आप myname@XXX2.YYY.com द्वारा लॉगिन कर सकते हैं

ssh XXX2

चूँकि XXX * का तात्पर्य XXX.YYY.com से है, पहले से ही HostName होना चाहिए %h, न कि%h.YYY.com
biocyberman

8

यह मेरे लिए काम करता है:

CanonicalizeHostname हाँ
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

होस्ट * .xxx.auckland.ac.nz
   उपयोगकर्ता myuser
मेजबान * .yyy.auckland.ac.nz
   उपयोगकर्ता myuser

इससे कोई भी डोमेन के भीतर नामों का उपयोग कर सकता है और उपयोगकर्ता नाम बदल सकता है:

bluebottle: ~ user_one $ ssh itslogprd05
myuser@itslogprd05.xxx.auckland.ac.nz का पासवर्ड: 

यह मेरे लिए सबसे अच्छा जवाब है। मुझे अपनी स्क्रिप्ट उत्पन्न करने के लिए उपयोग की जाने वाली स्क्रिप्ट से छुटकारा मिल गया!
jooks

क्या होगा यदि itslogprd05दोनों डोमेन में एक होस्ट मौजूद है? xxx.auckland.ac.nzजीतता है, मुझे लगता है?
लेवेंटे हुसको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.