আমি কি স্বয়ংক্রিয়ভাবে পরিচিত_হোস্টগুলিতে একটি নতুন হোস্ট যুক্ত করতে পারি?


249

এখানে আমার পরিস্থিতি: আমি একটি পরীক্ষার জোতা স্থাপন করছি যা একটি কেন্দ্রীয় ক্লায়েন্টের কাছ থেকে, বেশ কয়েকটি ভার্চুয়াল মেশিন ইনস্ট্যান্স চালু করবে এবং তারপরে তাদের উপর আদেশগুলি কার্যকর করবে ssh। ভার্চুয়াল মেশিনগুলির পূর্বে অব্যবহৃত হোস্ট-নেম এবং আইপি ঠিকানা থাকবে, সুতরাং সেগুলি ~/.ssh/known_hostsকেন্দ্রীয় ক্লায়েন্টের ফাইলে থাকবে না ।

আমার যে সমস্যাটি হচ্ছে তা হ'ল sshনতুন ভার্চুয়াল দৃষ্টান্তের বিরুদ্ধে প্রথম কমান্ডটি সর্বদা একটি ইন্টারেক্টিভ প্রম্পট নিয়ে আসে:

The authenticity of host '[hostname] ([IP address])' can't be established.
RSA key fingerprint is [key fingerprint].
Are you sure you want to continue connecting (yes/no)?

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


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

উত্তর:


141

কনফিগার ফাইলে বা এর মাধ্যমে StrictHostKeyCheckingবিকল্প সেট noকরুন -o:

ssh -o StrictHostKeyChecking=no username@hostname.com


62
এটি আপনাকে মাঝারি আক্রমণে মানুষের জন্য উন্মুক্ত করে, সম্ভবত এটি ভাল ধারণা নয়।
জ্যাস্পারওয়ালেস

9
@ য্যাস্পারওয়্যালাস, যদিও এটি সাধারণত ভাল পরামর্শ, নির্দিষ্ট ব্যবহারের ক্ষেত্রে (পরীক্ষার ভিএমগুলি মোতায়েন করা এবং তাদের কাছে আদেশ পাঠানো) যথেষ্ট নিরাপদ থাকা উচিত।
ম্যাসিমো

8
এটি একটি Warning: Permanently added 'hostname,1.2.3.4' (RSA) to the list of known hosts.সতর্কতা এড়াতে এবং কোনও পরিচিত_হোস্ট ফাইলগুলিতে এন্ট্রি যুক্ত হওয়া এড়াতে, আমি এটি করি:ssh -o StrictHostKeyChecking=no -o LogLevel=ERROR -o UserKnownHostsFile=/dev/null username@hostname.com
পিটার ভি।

11
ডাউনওয়োটিং কারণ এটি প্রশ্নের উত্তর দেয় না এবং গুরুতর সুরক্ষিত দুর্বলতার জন্য উন্মুক্ত করে।
marcv81

12
@ মেনবুয়েরোকো: আপনি যদি সুরক্ষা নিয়ে চিন্তিত হয়ে থাকেন তবে এই প্রশ্নটি করার জন্য আপনার কিছুই করার দরকার ছিল না। আপনার সামনে সঠিক হোস্ট কী থাকা উচিত, আপনি যে সিস্টেমের সাথে সংযোগ স্থাপন করতে চেয়েছিলেন তার কনসোল থেকে সংগ্রহ করা হয়েছিল এবং প্রথম সংযোগের পরে আপনি নিজেই এটি যাচাই করবেন। আপনি অবশ্যই "স্বয়ংক্রিয়ভাবে" কিছু করবেন না।
ইগনাসিও ওয়াজকেজ-আব্রামস

230

আইএমও, এটি করার সর্বোত্তম উপায়টি হল:

ssh-keygen -R [hostname]
ssh-keygen -R [ip_address]
ssh-keygen -R [hostname],[ip_address]
ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts

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


4
আপনার সমস্ত 3 টি এস-কি-স্ক্যানের দরকার কেন? হোস্টনেম এবং আইপি উভয়ই কাজ করে বলে আপনি প্রথমটি দিয়ে যেতে পারেন না?
রবার্ট

6
আপনি কী নিশ্চিত যে এসএস-কিস্ক্যান অনুরোধটির জবাব দেওয়ার মেশিনটি আসলেই আপনি যার সাথে কথা বলতে চান? না হলে আপনি নিজেকে মধ্য আক্রমণে একজনের কাছে উন্মুক্ত করেছেন।
জ্যাস্পারওয়ালেস

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

1
কলগুলি ssh-keyscanআমার জন্য ব্যর্থ হয়েছিল কারণ আমার লক্ষ্য হোস্টটি ডিফল্ট সংস্করণ 1 কী ধরণের সমর্থন করে না। -t rsa,dsaকমান্ডে যুক্ত করা এটি স্থির করে।
ফ্যাসেটওন্টি

5
এটি সম্ভবত একটি খারাপ ধারণা। আপনি এই কীগুলি আপডেট করে নিজেকে মধ্যবর্তী মধ্যের আক্রমণে খুলছেন। সদৃশ এন্ট্রিগুলি এড়ানোর জন্য, ssh-keygen -F [address]তার পরিবর্তে ফেরতের স্থিতি পরীক্ষা করুন । medium.com/@wblankenship/...
retrohacker

93

অলসদের জন্য:

ssh-keyscan -H <host> >> ~/.ssh/known_hosts

-H হোস্ট-নেম / আইপি ঠিকানা হ্যাশ করে


2
"ssh-keycan -H <host> >> ~ / .ssh / ज्ञात_হোস্টস" ব্যবহারকারীর মিথস্ক্রিয়াতে ssh কী করে তার মতো আরও একটি এন্ট্রি তৈরি করে। (-H দূরবর্তী হোস্টের নামটি হ্যাশ করেছে))
সারা মেসার

3
এমআইটিএম আক্রমণে ক্ষতিগ্রস্থ। আপনি কী আঙুলের ছাপটি পরীক্ষা করছেন না।
মেনবুয়েরোক

8
@ মেনবুয়েরোকো আপনি কী করবেন তা বলেন তবে কীভাবে নয়, যা সহায়ক হবে।
রায় 21

4
@ জামেশফিশার হ্যাঁ এটি এমআইটিএম আক্রমণগুলির পক্ষে ঝুঁকিপূর্ণ তবে আপনি আরএসএ ফিঙ্গারপ্রিন্টের সাথে কি কখনও তুলনা করেছেন, যখন আপনাকে ম্যানুয়ালি এটি করার সময় সার্ভারের প্রকৃত একটির সাথে দেখা হয়েছিল? কোন? সুতরাং এই উত্তরটি আপনার পক্ষে এটি করার উপায়। যদি হ্যাঁ, আপনার এই উত্তরটি ব্যবহার করা উচিত নয় এবং এটি ম্যানুয়ালি করা বা অন্যান্য সুরক্ষা ব্যবস্থাগুলি প্রয়োগ করা উচিত নয় ...
পাঁচ

2
@ মেনবুয়েরোকো আমি সত্যিই খুশি হব যদি আপনিও আমাদের এটি পরিচালনা করার জন্য আরও ভাল উপায় জানাতে পারেন, যখন আমাদের ব্যাচ স্ক্রিপ্টগুলিতে উপস্থিত না থাকা ব্যবহার করে একটি রেপো ক্লোন করতে হবে এবং আমরা এই প্রম্পটটি বাই-পাস করতে চাই। আপনি যদি মনে করেন যে এটি সঠিক নয় তবে দয়া করে আসল সমাধানের জন্য কিছুটা আলোকপাত করুন!
ওয়াকাস শাহ

42

যেমনটি উল্লেখ করা হয়েছে, কী-স্ক্যান ব্যবহার করা হ'ল এটি করার সঠিক এবং আপত্তিজনক উপায়।

ssh-keyscan -t rsa,dsa HOST 2>&1 | sort -u - ~/.ssh/known_hosts > ~/.ssh/tmp_hosts
mv ~/.ssh/tmp_hosts ~/.ssh/known_hosts

উপরোক্ত একটি হোস্ট যুক্ত করার কৌশলটি করবে, কেবল এটি যুক্ত করা না থাকলে কেবল। এটি নিরাপদ নয়; আপনি না একই সময়ে একাধিকবার একই উৎপত্তি মেশিনে স্নিপেট চালানো, যেমন tmp_hosts ফাইল, clobbered পেতে পারেন পরিণামে স্ফীত হয়ে উঠছে known_hosts ফাইল নেতৃস্থানীয় ...


কীটি আগে জানা_হোস্টগুলিতে আছে কিনা তা যাচাই করার কোনও উপায় আছে ssh-keyscan? কারণটি হ'ল এর জন্য কিছু সময় এবং অতিরিক্ত নেটওয়ার্ক সংযোগ প্রয়োজন।
ইউটিপিংগো

1
এই ফাইলটির মূল পোস্টারের সংস্করণটি ছিল cat ~/.ssh/tmp_hosts > ~/.ssh/known_hosts, তবে পরবর্তী সম্পাদনা এটিকে পরিবর্তন করে >>। ব্যবহার >>করা একটি ত্রুটি। এটি প্রথম লাইনে স্বতন্ত্রতার উদ্দেশ্যকে পরাস্ত করে এবং known_hostsএটি চালানোর সময় নতুন এন্ট্রিগুলিকে ছড়িয়ে দেয় । (এটি ফিরিয়ে
দেওয়ার জন্য সবেমাত্র

1
এটি অন্যদের মতো একই এমআইটিএম আক্রমণের বিষয়।
মেনবুয়েরোক

@utapyngo ssh-keygen -F আপনাকে বর্তমান ফিঙ্গারপ্রিন্ট দেবে। এটি যদি 1 এর রিটার্ন কোড সহ ফাঁকা ফিরে আসে তবে আপনার এটি নেই। যদি এটি কিছু প্রিন্ট করে এবং রিটার্ন কোড 0 হয় তবে এটি ইতিমধ্যে উপস্থিত রয়েছে।
সমৃদ্ধ এল

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

19

আপনি ssh-keyscanপাবলিক কী দখল করতে এবং আপনার known_hostsফাইলটিতে এটি যুক্ত করতে কমান্ডটি ব্যবহার করতে পারেন ।


3
এটি সঠিক কী কিনা তা নিশ্চিত করার জন্য আপনি ফিঙ্গারপ্রিন্টটি পরীক্ষা করেছেন কিনা তা নিশ্চিত করুন। অন্যথায় আপনি নিজেকে এমআইটিএম আক্রমণ থেকে মুক্ত করেন।
মেনবুয়েরোক

3
@ মেনবুয়েরোকো সাধারণ প্রসঙ্গে ফায়ার পয়েন্ট, তবে কেউ যদি ইতিমধ্যে সঠিক কীটি কী তা জানতেন তবে প্রোগ্রাম থেকে কীগুলি সংগ্রহ করার চেষ্টা করা হবে?
ব্রায়ান ক্লাইন

এটি করার উপায় এটি নয়। MITM।
জামেশফিশার

8

এভাবেই আপনি আপনার খেলার সাথে ssh-keycan অন্তর্ভুক্ত করতে পারেন :

---
# ansible playbook that adds ssh fingerprints to known_hosts
- hosts: all
  connection: local
  gather_facts: no
  tasks:
  - command: /usr/bin/ssh-keyscan -T 10 {{ ansible_host }}
    register: keyscan
  - lineinfile: name=~/.ssh/known_hosts create=yes line={{ item }}
    with_items: '{{ keyscan.stdout_lines }}'

1
আপনি কি কোনও পরিচিত বৈধ ज्ञात_হোস্টস ফাইল আপলোড করছেন, বা আপনি এসএস-কি-কিসন করছেন এবং আঙুলের ছাপগুলি যাচাই না করেই আউটপুটটি পরিচিত_হোস্টগুলিতে ডাম্প করছেন?
মেনবুয়েরোক

1
এটি হ'ল একটি কীস্ক্যানের আউটপুট ডাম্প করে। সুতরাং বাস্তবে এটি স্ট্রাইকটহস্টকিচেকিং = না এর সমান, কেবল নিঃশব্দ ज्ञात_হোস্টগুলি এসএস বিকল্পের সাথে ফিডিং না করে আপডেট করা ating এই সমাধানটি ssh-keycan একাধিক লাইন ফিরিয়ে দেওয়ার কারণেও ভাল কাজ করে না যার কারণে এই কার্যটি সর্বদা 'পরিবর্তিত' হিসাবে চিহ্নিত করা হয়
জার্ট

এটি করার উপায় এটি নয়। MITM।
জামেশফিশার

3
@ জামেশফিশারকে আমি সত্যিই খুশি হতে পারব যদি আপনি আমাদেরও এটি পরিচালনা করার জন্য আরও ভাল উপায় জানান, যখন আমাদের ব্যাচ স্ক্রিপ্টগুলিতে উপস্থিত না থাকা ব্যবহার করে একটি রেপো ক্লোন করা দরকার এবং আমরা এই প্রম্পটটি বাই-পাস করতে চাই। আপনি যদি মনে করেন যে এটি সঠিক নয় তবে দয়া করে আসল সমাধানের জন্য কিছুটা আলোকপাত করুন! দয়া করে আমাদের এটি "কীভাবে" করবেন তা যদি আপনি ভাবেন যে এটি করার সঠিক উপায়টি না হয়!
ওয়াকাস শাহ

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

7

এটি একটি সম্পূর্ণ সমাধান হবে, কেবল প্রথমবারের জন্য হোস্ট কী গ্রহণ করবে

#!/usr/bin/env ansible-playbook
---
- name: accept ssh fingerprint automatically for the first time
  hosts: all
  connection: local
  gather_facts: False

  tasks:
    - name: "check if known_hosts contains server's fingerprint"
      command: ssh-keygen -F {{ inventory_hostname }}
      register: keygen
      failed_when: keygen.stderr != ''
      changed_when: False

    - name: fetch remote ssh key
      command: ssh-keyscan -T5 {{ inventory_hostname }}
      register: keyscan
      failed_when: keyscan.rc != 0 or keyscan.stdout == ''
      changed_when: False
      when: keygen.rc == 1

    - name: add ssh-key to local known_hosts
      lineinfile:
        name: ~/.ssh/known_hosts
        create: yes
        line: "{{ item }}"
      when: keygen.rc == 1
      with_items: '{{ keyscan.stdout_lines|default([]) }}'

1
এটি করার উপায় এটি নয়। MITM।
জামেশফিশার

6

আমার অনুরূপ সমস্যা ছিল এবং দেখা গেছে যে সরবরাহিত উত্তরগুলির মধ্যে কিছু আমাকে কেবল একটি স্বয়ংক্রিয় সমাধানের অংশ হিসাবে পেয়েছে। নিম্নলিখিতটি আমি ব্যবহার করে শেষ করেছি, আশা করি এটি সহায়তা করে:

ssh -o "StrictHostKeyChecking no" -o PasswordAuthentication=no 10.x.x.x

এটি কীটি যুক্ত করে known_hostsএবং পাসওয়ার্ডের জন্য প্রম্পট করে না।


2
এমআইটিএম আক্রমণে ক্ষতিগ্রস্থ। আপনি আঙুলের ছাপটি পরীক্ষা করছেন না।
মেনবুয়েরোক

6
কেউ আঙুলের ছাপ পরীক্ষা করে না।
ব্রেন্ডন বাইার্ড

এটি করার উপায় এটি নয়। MITM।
জামেশফিশার

5

সুতরাং, আমি নীচে প্রদর্শিত হিসাবে গিট রেপো ক্লোনিংয়ের অচেতন হোস্ট ম্যানুয়াল মিথস্ক্রিয়াকে বাইপাস করার একটি জাগতিক উপায় অনুসন্ধান করছিলাম:

brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

আরএসএ কী ফিঙ্গারপ্রিন্ট নোট করুন ...

সুতরাং এটি একটি এসএসএইচ জিনিস, এটি এসএসএইচ গিটের জন্য কাজ করবে এবং সাধারণভাবে এসএসএইচ সম্পর্কিত জিনিসগুলি ...

brad@computer:~$ nmap bitbucket.org --script ssh-hostkey

Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey:
|   1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_  2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds

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

ভাল. আমি হয় একাধিক জায়গাগুলি এবং মেশিনগুলিতে যাচাই করেছিলাম সেগুলি নিয়ে আপস করছি - বা সব কিছুরই ক্ষুধার্ত হ'ল এর বিশদ ব্যাখ্যা যা ঘটছে তা হ'ল।

সেই 'ফিঙ্গারপ্রিন্ট' হ'ল একই আঙুলের ছাপে একাধিক স্ট্রিংয়ের সমাধানের ঝুঁকিতে আমাদের মানুষের সুবিধার্থে একতরফা অ্যালগরিদম দিয়ে ছোট করা একটি স্ট্রিং। এটি ঘটে, তাদের সংঘর্ষ বলা হয়।

নির্বিশেষে, মূল স্ট্রিংয়ে ফিরে যান যা আমরা নীচে প্রসঙ্গে দেখতে পারি।

brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg

সুতরাং, সময়ের আগে, আমাদের কাছে মূল হোস্টের কাছ থেকে একটি ফর্ম সনাক্ত করার উপায় রয়েছে।

এই মুহুর্তে আমরা ম্যানুয়ালি স্বয়ংক্রিয়ভাবে যতটা ঝুঁকির মধ্যে আছি - তারে মেলে, আমাদের কাছে বেস ডেটা রয়েছে যা আঙুলের ছাপ তৈরি করে, এবং আমরা ভবিষ্যতে সেই বেস ডেটা (সংঘর্ষ রোধে) জিজ্ঞাসা করতে পারি।

এখন সেই স্ট্রিংটি এমনভাবে ব্যবহার করা যাতে কোনও হোস্টের সত্যতা সম্পর্কে জিজ্ঞাসা করা যায় ...

এই ক্ষেত্রে জ্ঞাত_হোস্টস ফাইলটি সাদামাটা এন্ট্রি ব্যবহার করে না। আপনি হ্যাশ এন্ট্রিগুলি দেখলে তাদের জানবেন, তারা xyz.com বা 123.45.67.89 এর পরিবর্তে এলোমেলো অক্ষরযুক্ত হ্যাশগুলির মতো দেখায়।

brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

প্রথম মন্তব্যের রেখাটি উত্সাহজনকভাবে দেখায় - তবে আপনি ">" বা ">>" কনভেনশনের মাধ্যমে একটি সাধারণ পুনর্নির্দেশের সাহায্যে এ থেকে মুক্তি পেতে পারেন।

যেহেতু আমি "হোস্ট" এবং বিশ্বাস সনাক্ত করতে অবিযুক্ত ডেটা প্রাপ্ত করার জন্য যথাসাধ্য চেষ্টা করেছি, তাই আমি আমার _ / .ssh ডিরেক্টরিতে আমার পরিচিত_হোস্ট ফাইলটিতে এই সনাক্তকরণটি যুক্ত করব। যেহেতু এটি এখন একটি পরিচিত হোস্ট হিসাবে চিহ্নিত হবে, তাই আপনি যখন তরুণ ছিলেন তখন আমি উপরে উল্লিখিত প্রম্পটটি পাব না।

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

#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

সুতরাং, এইভাবে আপনি আজকের জন্য কুমারী থাকবেন। আপনি নিজের সময়ে অনুরূপ নির্দেশনা অনুসরণ করে গিথুব দিয়েও এটি করতে পারেন।

আমি অনেকগুলি স্ট্যাক ওভারফ্লো পোস্ট দেখেছি যা আপনাকে কোনও ধরণের চেকিং ছাড়াই প্রোগ্রামালিমে কীটি অন্ধভাবে যুক্ত করতে বলছে add আপনি বিভিন্ন নেটওয়ার্কে বিভিন্ন মেশিন থেকে কীটি যত বেশি চেক করবেন, তত বেশি আস্থা রাখতে পারেন যে হোস্ট যাকে বলেছে তা হল - এবং এটিই সুরক্ষার এই স্তরটি থেকে আশা করতে পারেন best

ভুল ssh -oStrictHostKeyChecking = হোস্টনাম নেই [কমান্ড]

ভুল ssh-keycan -t rsa -H হোস্টনেম >> ~ / .ssh / ज्ञात_হোস্টস

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


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

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

আপনার ওয়ার্কস্টেশন থেকে এসএসএইচ হোস্ট কীটি পড়ার জন্য এনএমএপ ব্যবহার করা এবং তারপরে স্ট্রাক্টহোস্টকিচেকিং বন্ধ করে এসএসএইচ দিয়ে সংযোগ স্থাপনের চেয়ে এই মানটি বিশ্বাস করা আলাদা নয়। এটি একটি মধ্য-আক্রমণের মতোই ঝুঁকিপূর্ণ।
মিকাহ আর লেডবেটার

... @ মাইকাআরএলড্বেডারের কারণেই আমি পরামর্শ দিয়েছি যে "বিভিন্ন কম্পিউটার এবং নেটওয়ার্কের আরও তুলনাগুলি সাধারণত সংযোগের উপর আস্থা রাখার আপনার ক্ষমতা বৃদ্ধি করবে"। তবে, এটি আমার বক্তব্য। যদি আপনি শুধুমাত্র পরিবেশের অবস্থার একটি সেট থেকে আপনার টার্গেট হোস্টটি চেক করেন তবে কীভাবে আপনি কোনও অসঙ্গতি সম্পর্কে জানতে পারবেন? আপনার কি আরও ভাল পরামর্শ ছিল?
BradChesney79

1
এটি সিকিউরিটি থিয়েটার। বৃহত্তর সুরক্ষার উপস্থিতি তৈরি করতে জটিল কিছু করা। হোস্টকে এর চাবি জিজ্ঞাসা করতে আপনি কতগুলি পৃথক পদ্ধতি ব্যবহার করেন তা বিবেচ্য নয়। একই ব্যক্তিকে একাধিকবার জিজ্ঞাসা করা যেমন আপনি তাদের বিশ্বাস করতে পারেন (সম্ভবত আপনি কল, ইমেল, পাঠ্য এবং শামুক মেল)। তারা সর্বদা হ্যাঁ বলবে, তবে আপনি যদি ভুল ব্যক্তিকে জিজ্ঞাসা করেন তবে তাতে কিছু আসে যায় না।
26:30 '17

5

আমি এক-লাইনের স্ক্রিপ্ট করি, একটি বিট দীর্ঘ কিন্তু দরকারী ব্যবহার গুণিতক আইপিগুলি সঙ্গে হোস্টের জন্য এই কাজের করতে, digএবংbash

(host=github.com; ssh-keyscan -H $host; for ip in $(dig @8.8.8.8 github.com +short); do ssh-keyscan -H $host,$ip; ssh-keyscan -H $ip; done) 2> /dev/null >> .ssh/known_hosts

5

নিম্নলিখিতগুলি ~ / .ssh / জ্ঞাত_হোস্টগুলিতে সদৃশ এন্ট্রিগুলি এড়ান:

if ! grep "$(ssh-keyscan github.com 2>/dev/null)" ~/.ssh/known_hosts > /dev/null; then
    ssh-keyscan github.com >> ~/.ssh/known_hosts
fi

1
এটি করার উপায় এটি নয়। MITM।
জামেশফিশার

আমার এই উত্তরটি সবচেয়ে ভাল লেগেছে। আমার ব্যতীত অন্য কারও কাছে র্যান্ডম ভিপিএসের প্রাথমিক সেটআপের স্ক্রিপ্টিংয়ের জন্য, এমআইটিএম ঝুঁকি অদৃশ্যভাবে ছোট। ইনফিনিটসিমাল কোয়েবল ... প্রথম লাইনটি হওয়া দরকারmkdir -p ~/.ssh/known_hosts;
মার্টিন ব্রামওয়েল

5

আপনি এই মেশিনগুলি কীভাবে তৈরি করছেন? আপনি একটি ডিএনএস আপডেট স্ক্রিপ্ট চালাতে পারেন? আপনি কি একটি আইপিএ ডোমেনে যোগদান করতে পারেন?

ফ্রিআইপিএ এটি স্বয়ংক্রিয়ভাবে করে, তবে মূলত আপনার যা যা দরকার তা হ'ল আপনার অঞ্চলের এসএসএইচএফপি ডিএনএস রেকর্ড এবং ডিএনএসএসইসি (ফ্রিপা কনফিগারযোগ্য বিকল্প হিসাবে সরবরাহ করে (ডিএনএসএফ ডিফল্ট দ্বারা অক্ষম))।

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

ssh-keygen -r jersey.jacobdevans.com

jersey.jacobdevans.com SSHFP জনের মধ্যে 1 জন 1 4d8589de6b1a48e148d8fc9fbb967f1b29f53ebc jersey.jacobdevans.com SSHFP 1 2 6503272a11ba6d7fec2518c02dfed88f3d455ac7786ee5dbd72df63307209d55 jersey.jacobdevans.com SSHFP 3 1 5a7a1e8ab8f25b86b63c377b303659289b895736> jersey.jacobdevans.com SSHFP 3 2 1f50f790117dfedd329dbcf622a7d47551e12ff5913902c66a7da28e47de4f4b

তারপরে একবার প্রকাশিত হয়ে গেলে আপনি নিজের VerifyHostKeyDNS yesssh_config বা ~ / .ssh / config এ যুক্ত করতে পারেন

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

ssh jersey.jacobdevans.com

তবে আমার ডোমেনটি এখনও স্বাক্ষরিত হয়নি, আপাতত আপনি দেখতে পাবেন ....

ডিবাগ 1: সার্ভার হোস্ট কী: ecdsa-sha2-nistp256 SHA256: H1D3kBF9 / t0ynbz2IqfUdVHhL / WROQLGan2ijkfeT0s

ডিবাগ 1: ডিএনএসে 4 টি সুরক্ষিত ফিঙ্গারপ্রিন্ট খুঁজে পেয়েছে

ডিবাগ 1: হোস্ট কী আঙ্গুলের ছাপ মিলছে matching

ডিএনএস-এ পাওয়া গেছে হোস্ট 'jersey.jacobdevans.com (2605: 6400: 10: 434 :: 10)' এর সত্যতা প্রতিষ্ঠিত হতে পারে না। ইসিডিএসএ-র কী ফিঙ্গারপ্রিন্টটি SHA256: H1D3kBF9 / t0ynbz2IqfUdVHhL / WROQLGan2ijkfeT0s। ডিএনএস-এ মিলছে হোস্ট কী আঙ্গুলের ছাপ। আপনি কি নিশ্চিত যে সংযোগ চালিয়ে যেতে চান (হ্যাঁ / না)? না


4

এটি সঠিকভাবে করতে, আপনি যা করতে চান তা হ'ল ভিএমএসের হোস্ট পাবলিক কীগুলি তৈরি করার সাথে সাথে সেগুলি তৈরি করে known_hostsফর্ম্যাটে কোনও ফাইলে রেখে দিন । তারপরে -o GlobalKnownHostsFile=...আপনি সেই ফাইলটি নির্দেশ করে , যে হোস্টের সাথে সংযোগ করছেন আপনার বিশ্বাস যে আপনাকে সংযুক্ত করা উচিত তা নিশ্চিত করতে আপনি এটি ব্যবহার করতে পারেন। আপনি কীভাবে এটি করেন তা নির্ভর করে আপনি ভার্চুয়াল মেশিনগুলি কীভাবে সেটআপ করছেন তার উপর নির্ভর করে তবে এটি সম্ভব হলে ভার্চুয়াল ফাইল সিস্টেমটি পড়া বা /etc/ssh/ssh_host_rsa_key.pubকনফিগারেশন চলাকালীন সামগ্রীগুলি মুদ্রণের জন্য হোস্টকে পাওয়া কৌশলটি করতে পারে।

এটি বলেছিল, আপনি কোন পরিবেশে কাজ করছেন এবং আপনার প্রত্যাশিত শত্রুরা কারা আছেন তার উপর নির্ভর করে এটি উপযুক্ত হবে না। উপরের অন্যান্য বেশ কয়েকটি উত্তরে বর্ণিত হিসাবে একটি সাধারণ "প্রথম সংযোগে প্রথম" (একটি স্ক্যানের মাধ্যমে বা কেবল প্রথম "বাস্তব" সংযোগের সময়) করা যথেষ্ট সহজ হতে পারে এবং এখনও সুরক্ষার কিছুটা মডিকাম সরবরাহ করতে পারে। তবে আপনি যদি এটি করেন তবে আমি দৃ strongly়ভাবে আপনাকে পরামর্শ দিচ্ছি যে আপনি ব্যবহারকারী নির্দিষ্ট হোস্ট ফাইল ( -o UserKnownHostsFile=...) এই নির্দিষ্ট পরীক্ষার ইনস্টলেশনের জন্য নির্দিষ্ট কোনও ফাইলে পরিবর্তন করুন ; এটি পরীক্ষার তথ্য সহ আপনার ব্যক্তিগত পরিচিত হোস্ট ফাইলকে দূষিত করা এড়াতে পারবেন এবং আপনি যখন আপনার ভিএমগুলি মুছবেন তখন এখন অকেজো পাবলিক কীগুলি পরিষ্কার করা সহজ করে দেবে।


4

এই পুরো

  • SSH কী-স্ক্যান
  • SSH-অনুলিপি-আইডি
  • ইসিএসডিএ কী সতর্কতা

ব্যবসায় আমাকে বিরক্ত করে চলেছে তাই আমি বেছে নিয়েছি

তাদের সমস্ত শাসন করার জন্য একটি স্ক্রিপ্ট

এটি লুপটিতে আমাদু বাহের উত্তর https://serverfault.com/a/858957/162693 সহ https://askubuntu.com/a/949731/129227 এ স্ক্রিপ্টটির বৈকল্পিক ।

উদাহরণ কল

./sshcheck somedomain site1 সাইট2 সাইট3

স্ক্রিপ্টটি নামগুলির সাইটগুলি লুপ করবে এবং .ssh / কনফিগারেশন এবং .ssh / ज्ञात_হোস্ট ফাইলটি সংশোধন করবে এবং অনুরোধে এসএসএস-কপি-আইডি করবে - শেষ বৈশিষ্ট্যের জন্য কেবল এসএসএস পরীক্ষার কলগুলি ব্যর্থ হওয়া যাক যেমন 3 বার প্রবেশ করে হিট করে fail পাসওয়ার্ড অনুরোধ।

sshcheck স্ক্রিপ্ট

#!/bin/bash
# WF 2017-08-25
# check ssh access to bitplan servers

#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='\033[0;34m'  
red='\033[0;31m'  
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='\033[0m'

#
# a colored message 
#   params:
#     1: l_color - the color of the message
#     2: l_msg - the message to display
#
color_msg() {
  local l_color="$1"
  local l_msg="$2"
  echo -e "${l_color}$l_msg${endColor}"
}

#
# error
#
#   show an error message and exit
#
#   params:
#     1: l_msg - the message to display
error() {
  local l_msg="$1"
  # use ansi red for error
  color_msg $red "Error: $l_msg" 1>&2
  exit 1
}

#
# show the usage
#
usage() {
  echo "usage: $0 domain sites"
  exit 1 
}

#
# check known_hosts entry for server
#
checkknown() {
  local l_server="$1"
  #echo $l_server
  local l_sid="$(ssh-keyscan $l_server 2>/dev/null)" 
  #echo $l_sid
  if (! grep "$l_sid" $sknown) > /dev/null 
  then
    color_msg $blue "adding $l_server to $sknown"
    ssh-keyscan $l_server >> $sknown 2>&1
  fi
}

#
# check the given server
#
checkserver() {
  local l_server="$1"
  grep $l_server $sconfig > /dev/null
  if [ $? -eq 1 ]
  then
    color_msg $blue "adding $l_server to $sconfig"
    today=$(date "+%Y-%m-%d")
    echo "# added $today by $0"  >> $sconfig
    echo "Host $l_server" >> $sconfig
    echo "   StrictHostKeyChecking no" >> $sconfig
    echo "   userKnownHostsFile=/dev/null" >> $sconfig
    echo "" >> $sconfig
    checkknown $l_server
  else
    color_msg $green "$l_server found in $sconfig"
  fi
  ssh -q $l_server id > /dev/null
  if [ $? -eq 0 ]
  then
    color_msg $green "$l_server accessible via ssh"
  else
    color_msg $red "ssh to $l_server failed" 
    color_msg $blue "shall I ssh-copy-id credentials to $l_server?"
    read answer
    case $answer in
      y|yes) ssh-copy-id $l_server
    esac
  fi
}

#
# check all servers
#
checkservers() {
me=$(hostname -f)
for server in $(echo $* | sort)
do
  os=`uname`
  case $os in
   # Mac OS X
   Darwin*)
     pingoption=" -t1";;
    *) ;;
  esac

  pingresult=$(ping $pingoption -i0.2 -c1 $server)
  echo $pingresult | grep 100 > /dev/null
  if [ $? -eq 1 ]
  then 
    checkserver $server
    checkserver $server.$domain
  else
    color_msg $red "ping to $server failed"
  fi
done
}

#
# check configuration
#
checkconfig() {
#https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh
  if [ -f $sconfig ]
  then
    color_msg $green "$sconfig exists"
    ls -l $sconfig
  fi
}

sconfig=~/.ssh/config
sknown=~/.ssh/known_hosts

case  $# in
  0) usage ;;
  1) usage ;;
  *) 
    domain=$1 
    shift 
    color_msg $blue "checking ssh configuration for domain $domain sites $*"
    checkconfig
    checkservers $* 
    #for server in $(echo $* | sort)
    ##do
    #  checkknown $server 
    #done
    ;;
esac

2

হোস্টের সংগ্রহ কীভাবে করবেন তা এখানে

হোস্টের সংগ্রহ সংজ্ঞায়িত করুন

ssh_hosts:
  - server1.domain.com
  - server2.domain.com
  - server3.domain.com
  - server4.domain.com
  - server5.domain.com
  - server6.domain.com
  - server7.domain.com
  - server8.domain.com
  - server9.domain.com

তারপরে পরিচিত হোস্টগুলিতে কীগুলি যুক্ত করতে দুটি কার্য সংজ্ঞা দিন:

- command: "ssh-keyscan {{item}}"
   register: known_host_keys
   with_items: "{{ssh_hosts}}"
   tags:
     - "ssh"

 - name: Add ssh keys to know hosts
   known_hosts:
     name: "{{item.item}}"
     key: "{{item.stdout}}"
     path: ~/.ssh/known_hosts
   with_items: "{{known_host_keys.results}}"

0

সেরা আপনি প্রতিটি নতুন সার্ভার / হোস্টের ফিঙ্গারপ্রিন্ট পরীক্ষা করতে পারেন। এটি সার্ভারের অনুমোদনের একমাত্র উপায়। এটি ছাড়াই, আপনার এসএসএইচ সংযোগটি মাঝারি-মধ্যবর্তী আক্রমণটির শিকার হতে পারে

যদি আপনি সত্যই নিশ্চিত হন যে আপনি আঙুলের ছাপটি যাচাই করতে চান না, তবে দ্বিতীয় সেরা, কম সুরক্ষিত বিকল্পটি হ'ল StrictHostKeyChecking=accept-new, যা ওপেনএসএসএইচ সংস্করণ 7.6 (2017-10-03) এ চালু হয়েছিল :

প্রথম "গ্রাহক-নতুন" স্বয়ংক্রিয়ভাবে এখন পর্যন্ত অদেখা কীগুলি গ্রহণ করবে তবে পরিবর্তিত বা অবৈধ হোস্টকিগুলির সংযোগ প্রত্যাখ্যান করবে।

পুরানো মান ব্যবহার করবেন নাStrictHostKeyChecking=no যা সার্ভারের সত্যতা কখনই পরীক্ষা করে না । (যদিও এই =noসেটিংটির অর্থ পরে কিছু প্রকাশিত হবে ))

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