নিয়মগুলি কেন ssh কনফিগারেশন ফাইলের সাথে সংযুক্ত হচ্ছে না?


12

দেখে মনে হচ্ছে নিম্নলিখিতটি প্রত্যাশার মতো কাজ করবে, অর্থাত্ দ্বিতীয় বিধি, প্রথম নিয়মের সাথে মেলে এমন একটি হোস্টনাম প্রয়োগ করলে তা প্রয়োগ হবে would

Host *.hostname.com
 User myuser
 IdentityFile ~/.ssh/myidentity

Host blah
 HostName complicated.hostname.com

তবে টাইপিং ssh blahশুধুমাত্র দ্বিতীয় নিয়ম প্রয়োগ করে (এবং প্রথমটির ব্যবহারকারী বা পরিচয় ফাইল নয়)।

আমার দুটি প্রশ্ন আছে:

  1. এটি কেন ঘটছে?
  2. আমি যা করার চেষ্টা করছি তা (সহজভাবে) করা সম্ভব?

উত্তর:


9

থেকে ssh_configমানুষ পৃষ্ঠা:

প্রতিটি প্যারামিটারের জন্য, প্রথম প্রাপ্ত মান ব্যবহার করা হবে। কনফিগারেশন ফাইলগুলিতে "হোস্ট" স্পেসিফিকেশন দ্বারা পৃথক বিভাগগুলি রয়েছে এবং সেই বিভাগটি কেবল সেই হোস্টগুলির জন্য প্রয়োগ করা হয় যা নির্দিষ্টকরণে প্রদত্ত একটি নিদর্শনগুলির সাথে মেলে। মিলিত হোস্টের নাম হ'ল কমান্ড লাইনে দেওয়া।

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

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

হোস্ট বিভাগ

 The possible keywords and their meanings are as follows (note that keywords 
 are case-insensitive and arguments are case-sensitive):

 Host    Restricts the following declarations (up to the next Host keyword) 
         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.  A single ‘*’ as a pattern can 
         be used to provide global defaults for all hosts.  The host is the 
         hostname argument given on the command line (i.e. the name is not
         converted to a canonicalized host name before matching).

         A pattern entry may be negated by prefixing it with an exclamation 
         mark (‘!’).  If a negated entry is matched, then the Host entry is      
         ignored, regardless of whether any other patterns on the line 
         match.  Negated matches are therefore useful to provide exceptions 
         for wildcard matches.

         See PATTERNS for more information on patterns.

প্যাটার্নস

 A pattern consists of zero or more non-whitespace characters, ‘*’ (a 
 wildcard that matches zero or more characters), or ‘?’ (a wildcard that
 matches exactly one character).  For example, to specify a set of 
 declarations for any host in the “.co.uk” set of domains, the following
 pattern could be used:

       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"

লেয়ারিং বিধি

আপনার পদ্ধতির সমস্যাটি হ'ল 1 ম হোস্ট বিভাগের সাথে মেলে এমন প্যাটার্নটি 2 য়ের সাথে মেলে না। আমি সাধারণত এটির মতো কিছু করি:

Host *
 User myuser
 IdentityFile ~/.ssh/myidentity


Host blah
 HostName complicated.hostname.com

একটি বিষয় যা লোকেরা সাধারণত এই নিয়মগুলি গ্রহণ করে না তা হ'ল তারা পুনরাবৃত্তি করতে পারে। তাই আমি প্রায়শই যা করি তার একাধিক বিভাগ থাকে এবং আমি সেগুলি ব্যবহার করে সেগুলি ভেঙে ফেলি Host *

Host *
 User user1

Host blah1
 HostName complicated1.hostname.com

Host blah2
 HostName complicated2.hostname.com

Host *
 User user2

3
আপনার উদাহরণে, "ইউজার 2" কীভাবে সেট করা হয়? আমি ভেবেছিলাম হোস্টের জন্য প্রথম প্রাপ্ত মানটি ব্যবহার করা হয়েছে, তাই প্রতিটি হোস্ট প্রথম ব্লকের সাথে মিলবে এবং "ব্যবহারকারীর 1" সেট থাকবে?
jdm

@jdm - 2 য় এর পরে আসা হোস্ট বিধিগুলি Host *মেলে যা তারা ইউজার 2 কে তাদের ডিফল্ট ব্যবহারকারী হিসাবে ব্যবহার করবে, যদি না তারা এটিকে স্পষ্টভাবে নির্দিষ্ট করে দেয়।
slm

@ এসএলএম: আমি আসলে খুঁজে পেয়েছি যে কাজ করবে না। যদি আপনি দুটি হোস্ট * ইউজার এক্সএক্সএক্স চেইন করেন এবং তারপরে হোস্ট * ব্যবহারকারীর পরের নিয়মটি "এক্সএক্সএক্সএক্স" ব্যবহার করবে - যদি না আমি কিছু ভুল করি।
জের্মি

@ এসএলএম, আপনার উদাহরণ কাজ করে না। 2 তম Host *পৌঁছে যাওয়ার সময় 'প্রতিটি-প্যারামিটার-ব্যবহৃত-ব্যবহৃত-এর জন্য' প্রথম প্রাপ্ত-মান-নিয়ম প্রয়োগ হয় এবং এইভাবে এবং নিম্নলিখিত এবং সমস্ত Userসংজ্ঞা উপেক্ষা করা হয়। এই বিধি থেকে একটি ব্যতিক্রম IdentityFileকীওয়ার্ড, বিটিডাব্লু।
maxschlepzig

5

কমান্ড লাইনে প্রদত্ত হোস্টনামের সাথে মেলে এমন সমস্ত বিভাগকে এসএসএইচ প্রয়োগ করে (যেমন, যে HostNameনিয়মগুলির সাথে এর মুখোমুখি হয় তা পরবর্তী অবস্থার চেকগুলিকে প্রভাবিত করে না)। যদি CanonicalizeHostnameসক্ষম করা থাকে, এটি আপডেট হওয়া হোস্টনেম ব্যবহার করে এটি শেষ হয়ে গেলে কনফিগারেশন ফাইলগুলিকে আবার প্রয়োগ করবে। (কিছু, SSH সংস্করণ এই নির্বিশেষে করেনি CanonicalizeHostnameএবং আপনার উদাহরণ ঐ সংস্করণের সাথে কাজ করবে; কিন্তু যে, SSH devs দ্বারা একটি বাগ বিবেচিত তা দেখুন। # 2267 ।)

যার অর্থ আপনি যুক্ত করে CanonicalizeHostnameআপনার উদাহরণকে কাজ করতে ব্যবহার করতে পারেন

Host *
  CanonicalizeHostname yes
  CanonicalizeFallbackLocal no

যা কোনও আধ্যাত্মিককরণ করবে না তবে আপডেট হোস্টনামের সাথে দ্বিতীয় পাস করা সক্ষম করবে। (দ্রষ্টব্য যে এটি কনফিগারেশনটিকে "পুনরাবৃত্ত" হিসাবে বিশ্লেষণ করবে না, কেবল একবার এটি পুনরাবৃত্তি করবে So সুতরাং আপনি যদি হোস্টনামটি দু'বার পরিবর্তন করেন তবে এটি কার্যকর হবে না))


1
আমি সম্প্রতি উবুন্টুকে 14.04 থেকে 16.04 এ আপগ্রেড করেছি এবং এটি দিয়েই এই বাগটি এসেছে। এই উত্তর নিখুঁত; এটি আমাকে আসল আচরণে ফিরে আসে। ধন্যবাদ!
ব্রায়ান ম্যালহর্ন

ugh # 2267 এর অর্থ হল যে Host nickname; Hostname hostnameস্তনজারা আর ডাকনাম সরবরাহ করতে সক্ষম নয়। CanonizalizeHostname yesআপনি প্রতিটি ডাক নাম ব্লকে কীওয়ার্ড যুক্ত করলে এটি কাজ করবে , তবে এটি ডাকনাম ব্লকগুলির আকার দ্বিগুণ করে এবং কুৎসিত দেখায়।
স্টুডোগুলি

1

ম্যান পেজ থেকে

প্রতিটি প্যারামিটারের জন্য, প্রথম প্রাপ্ত মান ব্যবহার করা হবে। কনফিগারেশন ফাইলগুলিতে '' হোস্ট '' স্পেসিফিকেশন দ্বারা পৃথক বিভাগগুলি রয়েছে এবং সেই বিভাগটি কেবল সেই হোস্টগুলির জন্য প্রয়োগ করা হয় যা নির্দিষ্টকরণে প্রদত্ত একটি নিদর্শনগুলির সাথে মেলে। মিলিত হোস্টের নাম হ'ল কমান্ড লাইনে দেওয়া।

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

আপনার প্রবেশের ক্রম পরিবর্তন করার চেষ্টা করুন।


দুর্ভাগ্যক্রমে এন্ট্রিগুলির ক্রমটি স্যুইচ করা কার্যকর হয় না (এটি আসলে আমি প্রথমে ব্যবহৃত আদেশ ছিল)।
Jérémie

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