একটি এসএসএইচ কনফিগারেশন ফাইলের জন্য অন্য কোনওটি অন্তর্ভুক্ত করার কোনও উপায় আছে?


131

ক্ষেত্রে এটি গুরুত্বপূর্ণ:

  • ওএস: উবুন্টু 10.04
  • এসএসএইচ: ওপেনএসএসএইচ_৩.৩ পি ১ দেবিয়ান -3 বুন্টু 5

আমি একটি এসএসএইচ কনফিগারেশন ফাইলটি অন্য একটি অন্তর্ভুক্ত করতে চাই। ব্যবহারের ক্ষেত্রেটি .ssh/configহ'ল আমার ডিফল্ট ফাইলে যা খুশি তা সংজ্ঞায়িত করা এবং তারপরে একটি পৃথক ফাইলে (উদাঃ ~/.ssh/foo.config) অতিরিক্ত দুটি জিনিস প্রি-পেন্ড করতে হবে । আমি দ্বিতীয় ফাইলটি প্রথমটি অন্তর্ভুক্ত করতে চাই, তবে আমাকে প্রথম ফাইলটিতে সমস্ত কিছু নকল করতে হবে না। এটা কি করণীয়? ধন্যবাদ!


2
সার্ভারফাল্টে একই প্রশ্ন: সার্ভারফল্ট.কোশনস / ৩5৫৫২৫/২
গেটলি

উত্তর:


140

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/* 

13
sh ssh -V সহ সংস্করণ পরীক্ষা করুন
পিটার

7
Include config.d/*সমস্ত এন্ট্রি অন্তর্ভুক্ত করতে ব্যবহার করুন config.d
সাইমন উডসাইড

17
এফটিআর: এটি ফাইলের শীর্ষে যেতে হবে এবং কেবল Hostএন্ট্রিগুলির তালিকায় যুক্ত করা যাবে না ।
dtk

2
উবুন্টু 16.04 এ চেষ্টা করেছেন। যদিও এটি কাজ করে, তবে স্বতঃপূরণটি ভেঙে যায় যা এটি কম দরকারী করে তোলে। আপনি যদি উবুন্টুতে এসএসএস
cWsu

@dtk এর জন্য ধন্যবাদ এটাই আমাকে স্টাম্পিং করছিল
অ্যাডাম কেইনান

28

না, আমার জ্ঞানের পক্ষে এটি সম্ভব নয়।

সম্পর্কিত ওপেন বৈশিষ্ট্য অনুরোধ / বাগ টিকিটের লিঙ্কগুলি এখানে রয়েছে:

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

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


2
এছাড়াও এই বাগটি দেবিয়ান
Lluís

8
ঈশ্বর. এটা হ্যাপেনিং হয়। 2016-04-15 13:01:08 EST: Slightly modified patch applied, this will be in openssh-7.3
oschrenk

এই উত্তরটি তখন সঠিক ছিল তবে এখন পুরানো।
মার্ক স্টসবার্গ

25

আপনি যদি কোনও এসএসএস ক্লায়েন্ট শুরু করতে চান তবে আপনি এটি ব্যাশে করতে পারেন:

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

তারপরে আপনি সাধারনত ssh ব্যবহার করেন এবং এতে উভয় ফাইলই সেই ক্রমে পড়ে।

সার্ভার ডিমনটির জন্য sshdআপনি একই কাজ করতে পারেন, কেবল -fপরিবর্তে ব্যবহার করুন -Fএবং যেখানে ডেমন সরাসরি শুরু করবেন সেখানে এটি লিখুন। তোমার কোনও উপনামের দরকার নেই

ম্যান পৃষ্ঠা অনুসারে একটি দ্বিতীয় সম্ভাবনা হ'ল সিস্টেম প্রশস্ত কনফিগারেশন /etc/ssh/ssh_configএবং ব্যবহারকারীকে প্রবেশ করা ~/.ssh/config

আপডেট আপাতদৃষ্টিতে কিছু ব্যাশ সংস্করণ এবং কীভাবে ডিভাইসগুলি তৈরি করা হয় তাতে কিছু সমস্যা আছে। (দেখুন http://bugs.lpinelinux.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"
}

1
দুঃখজনকভাবে এটি ওএসএক্স এর ssh এ কাজ করে না: ব্যবহারকারী কনফিগারেশন ফাইলটি খুলতে পারে না / dev / fd / 63: খারাপ ফাইল বর্ণনাকারী
অ্যাশ বার্লিন-টেলর

এটি আমার পক্ষে (উবুন্টু ১১.১০) লিনাক্সেও কাজ করে না যা উপরের পোস্টে অ্যাশবার্লিনের মতো একই ত্রুটি দেয়।
সিজিমন জেই

@ অ্যাশবার্লিন আপনি এটি চেষ্টাও করতে পারেন, বাগ ঠিক না হওয়া অবধি এটি
ওএসএক্সের

প্রদত্ত ssh তিনটি স্থান পরীক্ষা করে, 1. কমান্ড লাইন, 2. ~/.ssh/config, 3. /etc/ssh/ssh_config, আপনার ~/.ssh/configকমান্ড লাইনেও পাস করার দরকার নেই । কেবল alias ssh='ssh -F ~/.ssh/foo.config'এবং ~/.ssh/configতার পরে বাছাই করা উচিত। যতক্ষণ না আপনি foo.configপ্রথমে লোড হওয়ার বিষয়ে আপত্তি করবেন না যা উপরের কাজের তুলনায় পরিষ্কার হওয়া উচিত।
জিম

1
@ জিম না এটি এর মতো কাজ করে না। পাওয়া প্রথমটি ব্যবহার করা হয়। আপনি কি এটা চেষ্টা করেছেন? ম্যান পৃষ্ঠা থেকে "-এফ কনফিগারেশন: ব্যবহারকারী প্রতি বিকল্প কনফিগারেশন ফাইল সুনির্দিষ্ট করে । যদি কমান্ড লাইনে একটি কনফিগারেশন ফাইল দেওয়া হয়, সিস্টেম-প্রশস্ত কনফিগারেশন ফাইল (/ etc / ssh / ssh_config) উপেক্ষা করা হবে।"
এস্তানি

17

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

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

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


14

একইভাবে অন্য 'কুরুচিপূর্ণ' এখানে আমার ওয়ান-লাইনার:

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

নোট করুন যে sftpকমান্ড কনফিগার পুনরায় গণনার ট্রিগার করবে না।
ভাস্যনাভিকভ

2
(আমি এখনও উত্তরটি পছন্দ করি কারণ এটি "কনফিগারড /" ব্যবহার করে এবং খুব সহজ))
ভাস্যনাভিকভ

2
সরল, মার্জিত, তবুও হ্যাকি
কোড_মন্ক

6

ভাল, আমি এটি করতে প্রতারণা করছি। আমার ব্যাশ। প্রোফাইলে-ইশ ফাইলগুলিতে আমার একটি ব্লক রয়েছে যা আমার হোম ডিরেক্টরিটির বিভিন্ন টুকরো লগইনে প্রতিস্থাপন করে, তাই আমি প্রতিবারই একটি নতুন তৈরি করি। উদাহরণ:

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

এটি আমাকে এসআইএস কনফিগারেশন ফাইলে কনফিগার ব্লক যুক্ত করার মতো কাজগুলি করতে দেয় কেবলমাত্র যদি আমি হোস্ট এ বা বিতে থাকি তবে আমার হোম সিস্টেমগুলিতে নয়।

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


3

আমি ব্যক্তিগতভাবে এই কমান্ডগুলি 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

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


আপনি ফাইলের পরিবর্তন সম্পর্কে স্বয়ংক্রিয় সংকলনের জন্য আরও এক ধাপ এগিয়ে গিয়ে এটিকে fswatch এর সাথে সংযুক্ত করতে পারেন
ক্যাভালকেড

3

আরেকটি, ফুস-ভিত্তিক সমাধান (নিজেকে পরীক্ষা করা হয়নি):

https://github.com/markhellewell/sshconfigfs

"একটি বড় ফাইল পরিচালনা করা চালিয়ে যাওয়ার পরিবর্তে, [...] পরিবর্তে অনেকগুলি ছোট লজিকাল খণ্ডগুলি থেকে একটি কনফিগার" ফাইল "গতিশীলভাবে তৈরি করুন" "

আমি এফআইএফও এর মাধ্যমে এমন একটি নিবন্ধও পেয়েছি: http://www.linuxsysadmintutorials.com/m Multiple-ssh-client-configration-files /


1
আমি মন্তব্য সামগ্রীতে যথেষ্ট বর্ণনামূলক বলে মনে করি - এটি "ফুস" বলে (সম্ভবত সংক্ষিপ্ত আকারটি প্রসারিত করা আরও ভাল হবে); লিঙ্কটি কেবল একটি বাস্তবায়নের জন্য।
আভিভ

1
সংক্ষিপ্ত উত্তর সমস্যা সম্পর্কে সচেতন ছিল না, উত্তর প্রসারিত হয়েছে। দেখে মনে হচ্ছে ইমেল বিজ্ঞপ্তিগুলির অভাবে আমার সময়ে সময়ে আমার উত্তরগুলির জন্য সাইটটি ফিরে দেখতে হবে :) এখনই ফেভার্স ব্যবহার করতে শিখেছি। মন্তব্যের জন্য ধন্যবাদ।
amontero

2

এই ওরফে সমাধানগুলির কোনওটিই gitবা অন্য প্রোগ্রামগুলির জন্য কাজ করে না ssh

আমি দ্রুত এবং নোংরা একসাথে চড় মারলাম, তবে আপনি এটির উন্নতি করতে চাইতে পারেন।

এটি আপনার যুক্ত করুন ~/.bashrc

mkdir -p ~/.ssh/config.d/
[ -e ~/.ssh/config ] && mv ~/.ssh/config ~/.ssh/config.bak.$(date -Ins)
cat ~/.ssh/config.d/* > ~/.ssh/config

প্রতিবার আপনি যখন একটি সেশন শুরু করবেন, এতে সমস্ত ফাইল একসাথে মিশে যাবে ~/.ssh/config.d। (লাইন 3)

এই সংস্করণটির খারাপ দিকটি হ'ল আপনি যদি ~/.ssh/configপরবর্তী সেশনটি পরিবর্তন করেন তবে আপনি নিজের পরিবর্তনগুলি খোলেন, তাই এটি রোধ করতে আমি বিদ্যমান ফাইলটিকে একটি .bak ফাইলে স্থানান্তরিত করি। (লাইন 2) সেখানে সমস্যাটি হ'ল কিছুক্ষণ পরে আপনার সম্পূর্ণ প্রচুর .bak ফাইল থাকবে।


কিছু is_anything_changedশর্ত যুক্ত করার সাথে দুর্দান্ত
vp_arth

1

ইয়াক্কেটি থেকে প্যাকেজ ইনস্টল করে আপনি উবুন্টুতে এসএসএইচ সংস্করণটি খুব সহজেই v7.3 এ উন্নীত করতে পারেন (উবুন্টু জেনিয়াল ১ 16.০৪ তে পরীক্ষা করা):

echo "deb http://archive.ubuntu.com/ubuntu yakkety main" > /etc/apt/sources.list.d/yakkety.list
apt-get update
apt-get install -y ssh
rm /etc/apt/sources.list.d/yakkety.list
apt-get update

এসএসএইচ সংস্করণ পরীক্ষা করুন

ssh -V
OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016

ব্যবহার করতে SSH কনফিগার করুন from / .ssh / config.d ডিরেক্টরি অন্তর্ভুক্ত

mkdir ~/.ssh/config.d
sed -i '1iInclude config.d/*' ~/.ssh/config

0

আমার বোবা উত্তর:

  • জেনিয়ালে ওপেনএসএসএইচ> 7.3 ইনস্টল করার চেষ্টা করা হয়েছে (16.04)
  • গণ্ডগোলটি তৈরি করে নি

সুতরাং আমি এটির জন্য স্থির করেছি:

  • আপনার পৃথক ওপেনএসএইচ কনফিগারেশন ফাইলগুলিতে রাখুন ~/.ssh/config.d/
  • আপনি যখন একটি পরিবর্তন, করবেন cat ~/.ssh/config.d/* > ~/.ssh/config
  • গৌরবময় দিনে আপনি একটি ডিস্ট্রো সংস্করণে আপগ্রেড করেছেন যা ওপেনএসএইচ 7.3 পি 1 বা আরও নতুন রয়েছে, আপনি তার পরিবর্তে একটি ফাইল তৈরি করতে পারেন

Include config.d/*


0

আমি আমার মেশিনে এসএসএইচ আপগ্রেড করতে পারি না।

আমি যখন প্রয়োজন হবে তখনই এসএসএস কনফিগারেশন ফাইলটি তৈরি করতে আমি জিএনইউ মেক ব্যবহার করেছি :

# Concatenates all the .config files.
aInput  = *.config
aOutput = ~/.ssh/config

aCurrentMakefile = $(lastword $(MAKEFILE_LIST))

$(aOutput): $(shell ls $(aInput)) $(aCurrentMakefile)
    @echo "Generating $(aOutput)"
    @echo "# File generated by $(aCurrentMakefile) on $(shell date +'%F %T.%6N')" > $(aOutput)
    @cat $(aInput) >> $(aOutput)

তারপরে ssh এর সাথে এলিয়াস করা হয়

alias ssh='make -s -f ~/Tools/config.d/makefile -C ~/Tools/config.d && ssh'

ইহা যাদুর মত কাজ করে।

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