सवाल क्या एक एसएसएच कॉन्फ़िगरेशन फ़ाइल के लिए कोई दूसरा शामिल करने का कोई तरीका है?


यदि यह मायने रखता है:

  • ओएस: उबंटू 10.04
  • एसएसएच: ओपनएसएसएच_5.3 पी 1 डेबियन-3ubuntu5

मैं एक एसएसएच कॉन्फ़िगरेशन फ़ाइल को एक और शामिल करना चाहता हूं। उपयोग का मामला मेरे डिफ़ॉल्ट में जो भी चाहता है उसे परिभाषित करना होगा .ssh/config फ़ाइल और फिर एक अलग फ़ाइल में कुछ अतिरिक्त चीजें प्री-पेंड करें (उदा। ~/.ssh/foo.config)। मैं दूसरी फ़ाइल को पहले व्यक्ति को शामिल करना चाहता हूं, हालांकि, मुझे पहले में सब कुछ डुप्लिकेट करने की आवश्यकता नहीं है। क्या यह करने योग्य है? धन्यवाद!


115
2018-02-18 17:45


मूल


Serverfault पर वही प्रश्न: serverfault.com/questions/375525/... - guettli


जवाब:


7.3p1 और ऊपर से, वहाँ है Include कीवर्ड, जो आपको कॉन्फ़िगरेशन फ़ाइलों को शामिल करने की अनुमति देता है।

Include

      निर्दिष्ट कॉन्फ़िगरेशन फ़ाइल शामिल करें।   एकाधिक पथनाम निर्दिष्ट किए जा सकते हैं और प्रत्येक पथनाम   ग्लोब (3) वाइल्डकार्ड हो सकता है और,   उपयोगकर्ता कॉन्फ़िगरेशन के लिए, उपयोगकर्ता घर के लिए खोल-जैसे "~" संदर्भ   निर्देशिका। पूर्ण पथ के बिना फ़ाइलें हैं   में माना जाता है ~/.ssh यदि उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल में शामिल है   या /etc/ssh अगर से शामिल है   सिस्टम विन्यास फाइल। Include निर्देश हो सकता है   एक के अंदर दिखाई देते हैं Match या Host खंड   सशर्त समावेश करने के लिए।
स्रोत: ssh_config (5)

उदाहरण के लिए आप में हो सकता है ~/.ssh/config:

Include config.d/home

Host github.com
    HostName github.com
    User git

और में ~/.ssh/config.d/home:

Host laptop
    HostName laptop.lan

टिप्पणियों से, सभी फ़ाइलों को शामिल करने के लिए नीचे दिए गए का उपयोग करें config.d निर्देशिका:

Include config.d/* 

109
2017-11-05 20:12



$ ssh -V के साथ संस्करण की जांच करें - Pieter
उपयोग Include config.d/* सभी प्रविष्टियों को शामिल करने के लिए config.d। - Simon Woodside
एफटीआर: इसे फाइल के शीर्ष पर जाना है और इसे सिर्फ सूची में शामिल नहीं किया जा सकता है Host प्रविष्टियों। - dtk
उबंटू 16.04 पर कोशिश की। हालांकि, यह काम करता है, लेकिन स्वतः पूर्ण टूट गया है जो इसे कम उपयोगी बनाता है। अगर आप उबंटू पर एसएसएच अपग्रेड करना चाहते हैं, तो इस लिंक को चेक करें gist.github.com/stefansundin/0fd6e9de172041817d0b8a75f1ede677 - cwhsu


नहीं, मेरे ज्ञान के लिए यह संभव नहीं है।

संबंधित खुले फीचर अनुरोध / बग टिकट के लिंक यहां दिए गए हैं:

https://bugzilla.mindrot.org/show_bug.cgi?id=1585

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/739495


29
2018-02-18 17:54



डेबियन पर भी यह बग: bugs.debian.org/cgi-bin/bugreport.cgi?bug=631189 - Lluís
हे भगवान। यह हो रहा है। 2016-04-15 13:01:08 ईएसटी से: Slightly modified patch applied, this will be in openssh-7.3 - oschrenk


यदि आप एक एसएसएच क्लाइंट शुरू करना चाहते हैं, तो आप इसे बैश में कर सकते हैं:

#files are .ssh/config and ~/.ssh/foo.config
alias ssh='ssh -F <(cat .ssh/config ~/.ssh/foo.config)'

तो आप सामान्य रूप से एसएसएच का उपयोग करते हैं और इसमें दोनों फाइलें उस क्रम में पढ़ी जाएंगी।

सर्वर डेमॉन के लिए sshd आप वही कर सकते हैं, बस उपयोग करें -f के बजाय -F और इसे नीचे लिखें जहां आप सीधे डेमॉन शुरू करते हैं। आपको उपनाम की आवश्यकता नहीं है।

मैन पेज के अनुसार दूसरी संभावना प्रणाली को व्यापक विन्यास में रखना है /etc/ssh/ssh_config और उपयोगकर्ता में एक ~/.ssh/config

अद्यतन करें स्पष्ट रूप से कुछ बैश संस्करणों और डिवाइस कैसे बनाए जाते हैं, के साथ कुछ समस्या है। (देख http://bugs.alpinelinux.org/issues/1465)

यह एक कामकाज है (हालांकि मेरी राय में बदसूरत):

mkfifo /tmp/ssh_fifo
cat ~/.ssh/config ~/.ssh/foo.config >/tmp/ssh_fifo & 
ssh -F /tmp/ssh_fifo myserver
rm /tmp/ssh_fifo

इसलिए यदि आप चाहते हैं, तो आप इसमें से एक फ़ंक्शन बना सकते हैं (या एक स्क्रिप्ट):

ssh() {
    tmp_fifo=$(mktemp -u --suffix=_ssh_fifo)
    mkfifo "$tmp_fifo" 
    cat ~/.ssh/config ~/.ssh/foo.config >"$tmp_fifo" 2>/dev/null & 
    /usr/bin/ssh -F "$tmp_fifo" "$@"
    rm "$tmp_fifo"
}

24
2018-04-19 10:51



अफसोस की बात यह ओएसएक्स के एसएसएच पर काम नहीं करती है: उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल / dev / fd / 63 नहीं खोल सकता: खराब फ़ाइल वर्णनकर्ता - Ash Berlin-Taylor
यह मेरे लिए भी काम नहीं करता है (उबंटू 11.10) लिनक्स ऊपर पोस्ट @AshBerlin के समान त्रुटि दे रहा है। - Szymon Jeż
@AshBerlin आप इसे भी आजमा सकते हैं, यह बग ठीक होने तक ओएसएक्स के लिए भी काम करना चाहिए - estani
दिया गया एसएसएच तीन स्थानों की जांच करता है, 1. कमांड लाइन, 2। ~/.ssh/config, 3। /etc/ssh/ssh_config, आपको पास करने की आवश्यकता नहीं है ~/.ssh/config कमांड लाइन पर भी। केवल alias ssh='ssh -F ~/.ssh/foo.config' तथा ~/.ssh/config इसके बाद उठाया जाना चाहिए। जब तक आपको कोई फर्क नहीं पड़ता foo.config पहले लोड किया जा रहा है जो ऊपर के कामकाज की तुलना में क्लीनर होना चाहिए। - jim
@jim नहीं यह ऐसा काम नहीं करता है। पाया गया पहला इस्तेमाल किया जाता है। या तुमने कोशिश की? मैन पेज से "-F configfile: एक निर्दिष्ट करता है विकल्प प्रति उपयोगकर्ता विन्यास फाइल। यदि कमांड लाइन पर कॉन्फ़िगरेशन फ़ाइल दी जाती है, तो सिस्टम-व्यापी कॉन्फ़िगरेशन फ़ाइल (/ etc / ssh / ssh_config) को अनदेखा कर दिया जाएगा। " - estani


एसएसएच 7.3 से शुरू (1 अगस्त, 2016 को जारी), ए Include निर्देश उपलब्ध है।

शामिल: निर्दिष्ट कॉन्फ़िगरेशन फ़ाइल शामिल करें। एकाधिक पथ   नाम निर्दिष्ट किए जा सकते हैं और प्रत्येक पथनाम में ग्लोब हो सकता है   वाइल्डकार्ड और शेल की तरह "~" उपयोगकर्ता होम निर्देशिकाओं के संदर्भ।   पूर्ण पथ के बिना फाइलें माना जाता है ~/.ssh। एक    Include निर्देश एक के अंदर प्रकट हो सकता है Match या Host ब्लॉक करने के लिए   सशर्त समावेश प्रदर्शन करते हैं।

(यहां हल की गई बग रिपोर्ट का लिंक दिया गया है, जिसमें थै पैच भी शामिल है: https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24)


16
2017-07-11 15:22





इसी प्रकार अन्य 'बदसूरत' के लिए मेरा एक लाइनर है:

alias ssh="cat ~/.ssh/config.d/* > ~/.ssh/config; ssh"

14
2018-02-21 09:02



ध्यान दें कि sftp कमांड कॉन्फ़िगरेशन पुनरावृत्ति ट्रिगर नहीं करेगा। - VasyaNovikov
(मुझे अभी भी जवाब पसंद है क्योंकि यह "config.d /" का उपयोग करता है और यह बहुत आसान है।) - VasyaNovikov
सरल, सुरुचिपूर्ण, अभी तक हैकी - code_monk


खैर, मैं ऐसा करने के लिए धोखा देती हूँ। मेरे bash.profile-ish फ़ाइलों में मेरे पास एक ब्लॉक है जो लॉगिन पर मेरी होम निर्देशिका के विभिन्न टुकड़ों को प्रतिस्थापित करता है, इसलिए मैं हर बार एक नया उत्पन्न करता हूं। उदाहरण:

rm ~/.ssh/config
cat ~/conf/myservers.sshconfig >> ~/.ssh/config

[ -f ~/conf/workservers.sshconfig ] && cat ~/conf/workservers.sshconfig >> ~/.ssh/config
(or something like this:)
for i in `ls ~/conf/sshconfigs` ; do
    cat $i >> ~/.ssh/config
done

chmod 600 ~/.ssh/config

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

अब मुझे पता है, कोई इस बात को पकड़ लेगा कि अगर आप बहुत लॉग इन करते हैं तो इससे अत्यधिक मंदी हो सकती है, लेकिन व्यावहारिक रूप से मैंने इसे वास्तव में कभी नहीं देखा है। और मुझे यकीन है कि आप इसे एक स्क्रिप्ट में रख सकते हैं और इसे क्रॉन के माध्यम से भी आग लगा सकते हैं।


6
2017-11-20 19:26





एसएसएच कॉन्फ़िगरेशन संकलित करने के लिए मैं व्यक्तिगत रूप से उन आदेशों का उपयोग करता हूं:

alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config'
alias ssh='compile-ssh-config && ssh'
# (This will get used by other programs depending on the ~/.ssh/config)
# (If you need you can run the compile-ssh-config command via cron etc.)

या:

alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation'
alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation'
# (This is saver and won't over write an existing ~/.ssh/config file)

इसलिये:

alias ssh='ssh -F <(cat .ssh/*.config)'

मेरे लिए काम नहीं करता है, लौट रहा है:

ssh: Can't open user config file /dev/fd/63: Bad file descriptor

उम्मीद है कि यह किसी भी मदद की होगी।


3
2017-11-27 15:14



फ़ाइल परिवर्तन पर स्वचालित संकलन के लिए, आप एक कदम आगे जा सकते हैं और इसे fswatch के साथ जोड़ सकते हैं - cavalcade


एक और, FUSE- आधारित समाधान (स्वयं परीक्षण नहीं किया गया):

https://github.com/markhellewell/sshconfigfs

"एक बड़ी फाइल को प्रबंधित करना जारी रखने के बजाय, [...] इसके बजाय कई छोटे लॉजिकल हिस्सों से गतिशील रूप से एक कॉन्फ़िगरेशन" फ़ाइल "बनाएं।"

मुझे एफआईएफओ के माध्यम से ऐसा करने वाला एक लेख भी मिला है: http://www.linuxsysadmintutorials.com/multiple-ssh-client-configuration-files/


3
2018-06-10 17:54



ऐसा लगता है कि मुझे होना है एक बाहरी साइट के लिंक से मुश्किल से अधिक इसलिए हटाया जा सकता है। (क्योंकि लिंक 'मर' सकते हैं और कम से कम सामग्री को सारांशित करने में सहायक होता है ताकि लोग किसी भी विवरण के लिए दूसरी साइट पर जाने के लिए बाध्य न हों।) - pnuts
मुझे टिप्पणी सामग्री पर्याप्त वर्णनात्मक लगता है - यह कहता है "FUSE" (शायद संक्षिप्त नाम का विस्तार बेहतर होगा); लिंक सिर्फ एक कार्यान्वयन के लिए है। - aviv
फ्यूज। @aviv ठीक है, उत्तर अभी तक हटा नहीं दिया गया है, इसलिए उम्मीद है कि कोई नुकसान नहीं हुआ! - pnuts
संक्षिप्त उत्तर समस्या के बारे में पता नहीं था, विस्तार का जवाब दिया। ऐसा लगता है कि मुझे समय-समय पर ईमेल अधिसूचनाओं की अनुपस्थिति में, मेरे उत्तरों के लिए साइट को वापस देखना होगा :) अब तक एफएवी का उपयोग करना सीख लिया गया है। टिप्पणियों के लिए धन्यवाद। - amontero