জবাবদিহিতা এসএসএইচ সত্যতা পরীক্ষা কিভাবে উপেক্ষা করবেন?


164

উত্তর দিয়ে যাওয়া এসএসএইচ সত্যতা যাচাই উপেক্ষা করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, যখন আমি একটি নতুন সার্ভার সেটআপ করেছি তখন আমাকে এই প্রশ্নের হ্যাঁ উত্তর দিতে হবে:

GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?

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

উত্তর:


247

দুটি বিকল্প - প্রথমটি, যেমন আপনি আপনার নিজের উত্তরে বলেছিলেন, পরিবেশের পরিবর্তনকে ANSIBLE_HOST_KEY_CHECKINGভুয়াতে সেট করা হচ্ছে।

এটি সেট করার দ্বিতীয় উপায় হ'ল এটি একটি উত্তরীয় সিএফজি ফাইলে রেখে দেওয়া এবং এটি একটি সত্যিকারের দরকারী বিকল্প কারণ আপনি বিশ্বব্যাপী (সিস্টেম বা ব্যবহারকারী পর্যায়ে, /etc/ansible/ansible.cfgঅথবা ~/.ansible.cfg) বা একই ডিরেক্টরিতে একটি কনফিগারেশন ফাইল সেট করতে পারেন আপনি যে প্লেবুকটি চালাচ্ছেন সে হিসাবে

ansible.cfgএটি করতে, সেই অবস্থানগুলির মধ্যে একটিতে একটি ফাইল তৈরি করুন এবং এটি অন্তর্ভুক্ত করুন:

[defaults]
host_key_checking = False

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


সম্পাদনা করুন: সুরক্ষা সম্পর্কিত একটি নোট।

অবিচ্ছিন্ন হোস্টগুলির জন্য এসএসএইচ হোস্ট কী বৈধতা একটি অর্থবহ সুরক্ষা স্তর - আপনি যদি একই মেশিনে বহুবার সংযোগ স্থাপন করেন তবে স্থানীয়ভাবে হোস্ট কীটি গ্রহণ করা মূল্যবান।

দীর্ঘস্থায়ী ইসি 2 দৃষ্টান্তের জন্য, উদাহরণের প্রাথমিক তৈরির সময় একবারে কোনও টাস্ক রান দিয়ে হোস্ট কীটি গ্রহণ করা বুদ্ধিমান হয়ে উঠবে :

  - name: Write the new ec2 instance host key to known hosts
    connection: local
    shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

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

  • ডিফল্ট অনুসারে সক্ষম হওয়া ছেড়ে দিন (ইন ~/.ansible.cfg)
  • সংক্ষিপ্ত উদাহরণগুলির বিরুদ্ধে আপনি চালিত প্লেবুকগুলির জন্য ওয়ার্কিং ডিরেক্টরিতে হোস্ট কী চেকিং নিষ্ক্রিয় করুন ( ./ansible.cfgযোজনা ভিএমএসের বিরুদ্ধে ইউনিট পরীক্ষার জন্য প্লেবুকের পাশাপাশি স্বল্প-সময়ের ইক্য 2 উদাহরণের জন্য অটোমেশন)

5
এখানে সেরা অনুশীলন কোনটি জানেন? উদাহরণস্বরূপ, আপনি আপনার পরিচিত হোস্টগুলিকে পুনরায় সেট করতে পর্যায়ক্রমে একটি স্ক্রিপ্ট চালাতে পারেন যা আরও সুরক্ষিত হবে (যদি না that উইন্ডোটি অতিক্রম করে কোনও এমআইটিএম আক্রমণের শিকার হয়)। ডিফল্টরূপে সত্যতা উপেক্ষা করা এসএসএইচ প্রাথমিক সুরক্ষা পদ্ধতিগুলির মধ্যে
একটিটিকে সরিয়ে দেয়

3
আমার দলটির ব্যবহারের প্যাটার্নটি আমি পছন্দ করি: আমরা জবাবদিহি সিএফজি ফাইলগুলি রেখেছি যেগুলি প্লেবুকের জন্য ওয়ার্কিং ডিরেক্টরিগুলিতে হোস্ট কী চেকিং অক্ষম করে যা আমরা ইফেমেরাল উদাহরণগুলির সাথে চালিত করি (ইউনিট টেস্টগুলি যা ভিজেন্ট ভিএম, অ্যাডাব্লুএস ই সি 2 উদাহরণস্বরূপ চালিত হয়) এবং এখানে পরীক্ষা সক্ষম করে সক্ষম করা হয় সিস্টেম স্তর
নিকোবেলিয়া

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

2
কিছু মেকানিজম স্থায়ী বা অস্থায়ী নতুন মেশিন সরবরাহের জন্য ব্যবহৃত হয়, তবে সেই ব্যবস্থায় আপনাকে এই মেশিনের এসএসএইচ পাবলিক কী সরবরাহ করতে হবে provide তারপরে আপনি এটিকে known_hostsএসএসএইচ এবং মেশিনকে সনাক্ত করতে উত্তর দেওয়ার জন্য আপনার বিভিন্ন স্থানীয় ফাইলগুলিতে সঞ্চয় করতে পারেন । এটি করতে ব্যর্থতা, বিশেষত হোস্ট কী পরীক্ষার অক্ষম করে, এসএসএইচের সুরক্ষাটিকে প্রায় শূন্যের দিকে নামিয়ে দেয় এবং এমআইটিএম আক্রমণকে অনুমতি দেয়। "অভ্যন্তরীণ নেটওয়ার্ক" এ উপস্থিত থাকার মতো অনেকগুলি মেশিন প্রকৃতপক্ষে ইন্টারনেটের সাথে সংযুক্ত থাকে, যেখানে একটিমাত্র দ্রুত ডিএনএস প্রতিক্রিয়া আপনাকে আপনার টার্গেটের পরিবর্তে আক্রমণকারীর সাথে কথা বলতে দেয়।
এফ

2
@ টনিএইচ যখন এডাব্লুএস ক্লাউডফর্মেশন এবং উত্তরযোগ্য মাধ্যমে অনেক হোস্ট স্থাপন করার সময়, আমি ssh-keyscan <ip list>একই নেটওয়ার্কের ভিতরে একটি বিশ্বস্ত মেশিনে (আমার জন্য এটি একটি ঘাঁটি / জাম্প হোস্ট) দৌড়েছিলাম এবং ফলাফলগুলি known_hosts বিশ্বস্ত হোস্ট স্থাপনের জন্য রেখেছিলাম, এডাব্লুএস প্রকাশ করে উদাহরণটি শুরু করার জন্য লগগুলিতে হোস্ট কী, সুতরাং সেই চাবিটি হান্ট করা একটি ম্যানুয়াল পদক্ষেপ ছিল আমি যদি আমার পরিবেশের একটি সম্পূর্ণ বিনোদন করতাম তবে আমি কখনই কাটতাম না। তবে সেই হোস্টটি সাধারণত মুছতে হবে না। এটি সাহায্য করতে পারে।
dcc310

34

আমি উত্তরটি পেয়েছি, আপনাকে পরিবেশের পরিবর্তনশীল সেট ANSIBLE_HOST_KEY_CHECKINGকরতে হবে False। উদাহরণ স্বরূপ:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...

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

নতুন সার্ভার তৈরি করার সময় এটি ব্যাশ স্ক্রিপ্টে ব্যবহৃত হয় , এটি অন্য কোনও কিছুর জন্য ব্যবহৃত হয় না।
জোহান

8

নিকোবেলিয়ায় ফরোয়ার্ড

যারা প্লেবুক চালানোর জন্য জেনকিন্স ব্যবহার করেন, আমি উত্তর-প্লেবুক চালানোর আগে আমার জেনকিন্সের চাকরিতে যুক্ত করেছিলাম সে পরিবেশের পরিবর্তনশীল ANSIBLE_HOST_KEY_CHECKING = মিথ্যা উদাহরণস্বরূপ:

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv

6

সমস্ত হোস্টের জন্য পরিবর্তন host_key_checkingকরা falseখুব খারাপ ধারণা।

আপনি কেবল এটিকে অগ্রাহ্য করতে চান, "প্রথম যোগাযোগ" এ, যা এই দুটি কাজ সম্পাদন করবে:

    - name: Check SSH known_hosts for {{ inventory_hostname }}
      local_action: shell ssh-keygen -F {{ inventory_hostname }}
      register: checkForKnownHostsEntry
      failed_when: false
      changed_when: false
      ignore_errors: yes
    - name: Add {{ inventory_hostname }} to SSH known hosts automatically
      when: checkForKnownHostsEntry.rc == 1
      changed_when: checkForKnownHostsEntry.rc == 1
      set_fact:
        ansible_ssh_common_args: '-o StrictHostKeyChecking=no'

সুতরাং আমরা কেবল আমাদের known_hostsফাইলে হোস্ট কী না থাকলে কেবল হোস্ট কী চেকিং বন্ধ করব ।


3

প্লেবুক চালানোর সময় আপনি এটি কমান্ড লাইন আর্গুমেন্ট হিসাবে পাস করতে পারেন:

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'


2

আপনি যদি সংশোধন করতে না চান ansible.cfgবা playbook.ymlতারপরে আপনি কেবল পরিবেশের পরিবর্তনশীল সেট করতে পারেন:

export ANSIBLE_HOST_KEY_CHECKING=False

0

Ssh বৈধতা উপেক্ষা করার জন্য ভ্যালিড_সেসার্টস নামে পরিচিত প্যারামিটারটি ব্যবহার করুন

- ec2_ami:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

এটি করে এটি ssh বৈধতা প্রক্রিয়াটিকে উপেক্ষা করে


validate_certsপরামিতি কেবল যাচাই না ডেস্কটপ AWS এপিআই HTTPS দ্বারা যা নিশ্চিতভাবে ঘটবে boto বলে। এটি এসএসএইচ কী যাচাইকরণকে প্রভাবিত করে না।
ম্যাথু ডটন

0

আমি জানি যে প্রশ্নের উত্তর দেওয়া হয়েছে এবং এটিও সঠিক, তবে কেবল উত্তরসূচক ডকটি এখানে লিঙ্ক করতে চেয়েছিল যেখানে এটি পরিষ্কারভাবে ব্যাখ্যা করা হয়েছে কখন এবং কেন সংশ্লিষ্ট চেক যুক্ত করা উচিত: হোস্ট-কী-চেকিং


0

আপনি যখন প্লেবুকে ডায়নামিক ইনভেন্টরিতে (অ্যাড_হোস্ট মডিউল মাধ্যমে) নতুন হোস্ট যুক্ত করতে চান তখন সর্বাধিক সমস্যা দেখা দেয়। আমি স্থায়ীভাবে ফিঙ্গারপ্রিন্ট হোস্ট চেকিং অক্ষম করতে চাই না তাই এটি কোনও বৈশ্বিক কনফিগারেশন ফাইলটিতে অক্ষম করার মতো সমাধান আমার পক্ষে ঠিক নয়। ANSIBLE_HOST_KEY_CHECKINGপ্লেবুক চালানোর আগে বৈবাহিক রফতানি করা চালানোর আগে করা অন্য জিনিস যা মনে রাখা দরকার।

প্লেবুক যেখানে আছে সেখানে একই কনটেস্টে স্থানীয় কনফিগারেশন ফাইল যুক্ত করা ভাল। নামযুক্ত ফাইল তৈরি করুন ansible.cfgএবং নিম্নলিখিত পাঠ্যটি আটকে দিন:

[defaults]
host_key_checking = False

এনভ ভার্সে কিছু যুক্ত করতে বা ansible-playbookবিকল্পগুলিতে যুক্ত করার দরকার নেই । জবাবদিহি গিট রেপোতে এই ফাইলটি রাখা সহজ।

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