আপনার কি একাধিক ~ / .ssh / config ফাইল থাকতে পারে?


82

আমাদের একটি বেসেশন সার্ভার রয়েছে যা আমরা একাধিক হোস্টের সাথে সংযোগ করতে ব্যবহার করি এবং আমাদের .ssh / কনফিগারেশনটি এক হাজারেরও বেশি লাইনে পরিণত হয়েছে (আমাদের সংযুক্ত কয়েকশো হোস্ট রয়েছে)। এটি কিছুটা অপ্রয়োজনীয় হতে শুরু করেছে এবং আমি জানতে চাই যে একাধিক ফাইলে .ssh / কনফিগারেশন ফাইলটি ভেঙে ফেলার কোনও উপায় আছে কিনা। আদর্শভাবে, আমরা কোথাও উল্লেখ করব যে অন্যান্য ফাইলগুলি .ssh / কনফিগারেশন ফাইল হিসাবে বিবেচিত হবে, সম্ভবত:

~/.ssh/config
  ~/.ssh/config_1
  ~/.ssh/config_2
  ~/.ssh/config_3
  ...

আমি এসএসএস / কনফিগারেশনে ডকুমেন্টেশন পড়েছি এবং আমি এটি দেখতে পাচ্ছি না। তবে হতে পারে অন্য কারওর মতোই সমস্যা হয়েছে এবং এর সমাধান খুঁজে পেয়েছেন।


প্রতিটি ব্যবহারকারীকে তাদের নিজস্ব ব্যবহারকারীর সাহায্যে বেসমেন্ট হোস্টে লগইন করুন। এছাড়াও, আপনি প্রতিটি হোস্টের জন্য একটি এন্ট্রি প্রয়োজন এমন কনফিগারেশন ফাইলটিতে কী রাখছেন? আপনি সাধারণ কিছু ডিফল্ট সেট করতে পারবেন না?
জেড ড্যানিয়েল


1
শীঘ্রই, ওপেনএসএইচ 7.3 এ এটি সম্ভব হওয়া উচিত। bugzilla.mindrot.org/show_bug.cgi?id=1585#c25
আজমেউক

উত্তর:


51

~/.ssh/configফাইল অন্যান্য ফাইল, সম্ভবত ফাইল অনুমতির জন্য, SSH এর চেক এর সাথে সম্পর্কিত সহ একটি নির্দেশ নেই।

এর আশেপাশের পরামর্শগুলি সিস্টেমে বা একটি সংগ্রহস্থলের চেকিন হুকের মাধ্যমে এক সাথে একাধিক পরিবর্তন ঘটাতে একটি স্ক্রিপ্ট অন্তর্ভুক্ত করতে পারে। কেউ পুতুল বা অউজিয়ার মতো সরঞ্জামগুলিতেও নজর দিতে পারে।

তবে আপনি যদি এটির কাছে যান তবে আপনাকে পৃথক ফাইলগুলি ফাইলের বাইরে থেকে একক ফাইল হতে হবে aten

$ cat ~/.ssh/config_* >> ~/.ssh/config

দ্রষ্টব্য: ওভাররাইট: > বনাম সংযোজন:>>

ডিসেম্বর 2017 আপডেট করুন:

7.3p1 এবং তার থেকে উপরে, অন্তর্ভুক্ত বিকল্প রয়েছে। যা আপনাকে কনফিগারেশন ফাইলগুলি অন্তর্ভুক্ত করতে দেয়।

Include
    Include the specified configuration file(s).  Mul‐
    tiple pathnames may be specified and each pathname
    may contain glob(3) wildcards and, for user config‐
    urations, shell-like “~” references to user home
    directories.  Files without absolute paths are
    assumed to be in ~/.ssh if included in a user con‐
    figuration file or /etc/ssh if included from the
    system configuration file.  Include directive may
    appear inside a Match or Host block to perform con‐
    ditional inclusion.

ধন্যবাদ জেফ, এটি একটি ভাল ধারণা। পুতুল বা অউজিয়াস সম্পর্কে আমি খুব বেশি জানি না, তাই জিনিসগুলিকে যতটা সম্ভব সহজ রাখার জন্য, আপনার সমাধানটি সেরা বলে মনে হচ্ছে। আমি কনফিগারটিকে একাধিক কনফিগারে বিভক্ত করতে পারি এবং যখনই কোনও ফাইল পরিবর্তন করা হয় তখন .ssh / কনফিগারেশন ফাইলটিকে পুনরায় তৈরি করতে একটি সাধারণ স্ক্রিপ্ট তৈরি করতে পারি। আমি জানি না যে এটি কোনও সমাধানটি কতটা পরিষ্কার, তবে মনে হয় এটি কৌশলটি করেছে এবং এটি আমার উদ্দেশ্যে কাজ করে।
র‌্যাংলার

52

আপনি এসএসএস বিকল্পে ব্যবহারের জন্য বর্তমান কনফিগারেশন ফাইলটি নির্দিষ্ট করতে পারেন:

ssh -F /path/to/configfile

দেখে মনে হচ্ছে এটি একমাত্র উপায়।

এছাড়াও এখন অন্য একটি কনফিগারেশন অন্তর্ভুক্ত করার আছে।


পার্লের নেট :: ওপেনএসএসএইচ মডিউল (যেমন একাধিক ব্যক্তিগত কী ফাইলগুলির জন্য) ব্যবহার করার সময় বিকল্প থাকা ভাল have যেখানে মডিউলটি সমস্ত সম্ভাবনা দেয় না।
জিমি কোর্টিং

36

Ssh 7.3 (1 আগস্ট, 2016 এ প্রকাশিত) দিয়ে শুরু করে, একটি Includeনির্দেশিকা পাওয়া যায়।

অন্তর্ভুক্ত করুন : নির্দিষ্ট কনফিগারেশন ফাইল (গুলি) অন্তর্ভুক্ত করুন। একাধিক পাথের নাম নির্দিষ্ট করা যেতে পারে এবং প্রতিটি পথের নামটিতে গ্লোব ওয়াইল্ডকার্ড এবং শেল-জাতীয় "~" ব্যবহারকারীর হোম ডিরেক্টরিতে উল্লেখ থাকতে পারে। নিখুঁত পাথ ব্যতীত ফাইলগুলি এটিকে ধরে নেওয়া হয় ~/.ssh। শর্তসাপেক্ষ অন্তর্ভুক্তি সম্পাদনের জন্য কোনও Includeনির্দেশিকা একটি Matchবা Hostব্লকের ভিতরে উপস্থিত হতে পারে ।

(সমাধান হওয়া বাগের প্রতিবেদনের লিঙ্কটি এখানে রয়েছে, এতে প্যাচও রয়েছে: https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24 )


2
এটা খুব দুর্দান্ত। এই অপেক্ষায় থাকুন। অবশেষে এই সমস্যাটি সঠিকভাবে সমাধান করা উচিত :)
র‌্যাঙ্গলার

2
কেবলমাত্র configফাইলের শীর্ষে অন্তর্ভুক্ত নির্দেশিকা যুক্ত করুন। এটি নীচে কেন কাজ করছে না তা আমি বুঝতে পারি না।
পাইওভার

17

আমি ব্যক্তিগতভাবে এই কমান্ডগুলি ssh কনফিগার সংকলন করতে ব্যবহার করি:

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

আশা করি এটি কোনও উপকারে আসবে।


ssh -F <(cat .ssh/*.config)আদর্শ হবে। আমি এটি নিয়েও এসেছি, তবে একই ত্রুটিটি পাচ্ছি। কেউ কি জানেন এখানে সমস্যা কি?
সিলিল

2
ssh ফাইলের অনুমতি পরীক্ষা করে, আমার মনে হয় এই ধরণের পুনর্নির্দেশ সেই চেকটিকে সমর্থন করে না।
ক্যামডেন নার্জট

2

আমি cat config_* > configসম্পূর্ণ কনফিগারেশন তৈরি করতে ব্যবহার করব । তবে আমি এর জন্য পুতুল / সিফেনজিন ইত্যাদি ব্যবহার করব না, যদি তারা এখনও জায়গা না করে থাকে (বিটিডাব্লু: কেন একটি কনফিগার ম্যানেজমেন্ট সিস্টেম ব্যবহার করবেন না ???)।

আমি একটি প্যাকেজ তৈরি করব (দেব, আরপিএম) এবং এটিকে স্থানীয় সংগ্রহস্থলে রাখি। এবং পোস্টিনস্ট স্ক্রিপ্টে বিড়ালটি আপনার কনফিগারেশন তৈরি করে। সম্ভবত আপনি একটি স্থানীয় ফোল্ডারও অন্তর্ভুক্ত করেছেন ... সুবিধাটি হ'ল ক্রোন-অ্যাপ্লিকেশন এবং কো চলাকালীন প্রতিদিনের বেসে ssh / config আপডেটগুলি সক্রিয় হয়।


0

আপনি এখানে একটি মেকফাইল ব্যবহার করতে পারেন ~/.ssh:

    config: config.in config.app.in
        > $@
        (for f in $+; do cat $$f; echo; done) | sed '$$ d' >> $@

    config.app.in:
        (echo "# Generated with foobar.sh."; \
            foobar.sh) > $@
    .PHONY: config.app.in

তারপর আপনার বিদ্যমান সরাতে configকরতে config.inএবং চালানোর makeজেনারেট করতে config


0

আমি config.dআমার কনফিগার আয়োজনের জন্য একটি ডিরেক্টরি ধারণার সাথে খেলছি । উপরের বিকল্পগুলির গাদা যুক্ত করতে, আমার জন্য কী কাজ করছে তা এখানে।

ডিরেক্টরি কাঠামো কিছু

~/.ssh/config.d
├── system_1
├── system_2
├── system_3
├── personal_boxen
├── git_things
├── random
└── rubbish

Shell / .ssh / config তৈরি করে এবং আমার শেলটির রান-কনফিগারেশনে বাস করে এমন ফাংশনটি নিম্নরূপ

sshMakeConfig() {
    echo '# AUTOGENERATED by sshMakeConfig()' > ~/.ssh/config
    for i in ~/.ssh/config.d/*
        do echo "#${i}" | tee -a ~/.ssh/config
        cat ${i} >> ~/.ssh/config
    done
}

sshMakeConfigআপনি প্রতিটি শেল সেশনে একটি নতুন কনফিগারেশন নিশ্চিত করতে চাইলে Oচ্ছিকভাবে আপনার রান-কনফিগারের নীচে যুক্ত করুন

আমার ~ / .ssh / কনফিগারেশনটি পুনরায় সংকলন করার যে কোনও সময় আমি sshMakeConfigকিছু ফর্ম (সরাসরি, আমার রান-কনফিগারকে সোর্সিং করে বা একটি নতুন শেল শুরু করে) চালিয়ে তা করি do

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.