ssh: স্বয়ংক্রিয়ভাবে কী গ্রহণ করুন


218

আমি এই ছোট্ট ইউটিলিটি স্ক্রিপ্ট লিখেছি:

for h in $SERVER_LIST; do ssh $h "uptime"; done

যখন একটি নতুন সার্ভার যুক্ত করা হয় $SERVER_LIST, তখন স্ক্রিপ্টটি বন্ধ হয়ে যায়:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

আমি চেষ্টা করেছি yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

কোন ভাগ্য ছাড়া।

sshকোনও নতুন কী স্বয়ংক্রিয়ভাবে গ্রহণ করার জন্য কি প্যারামিট্রাইজ করার কোনও উপায় আছে ?


6
লেকেনস্টেইনের উত্তরটি দুর্দান্ত এবং সঠিক, তবে আমি কেবল এটি লক্ষ করতে চেয়েছিলাম যে যেহেতু ssh "হ্যাঁ" এবং yes"y" আউটপুট প্রত্যাশা করছে , তাই আপনার ভাগ্য ভাল হতে পারে for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done(অতিরিক্ত হ্যাঁ নোট করুন, যা "y এর পরিবর্তে হ্যাঁ কী বলবে তা বলে" ")।
চাজোম্যাটাস

উত্তর:


239

স্ট্রাইকহস্টকিচেকিং বিকল্পটি ব্যবহার করুন, উদাহরণস্বরূপ:

ssh -oStrictHostKeyChecking=no $h uptime

এই বিকল্পটি ~ / .ssh / config এ যুক্ত করা যেতে পারে, যেমন:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

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

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

যদি আপনার হোস্টগুলি প্রায়শই পুনরায় ইনস্টল না করা হয় তবে -oUserKnownHostsFile=/dev/nullবিকল্পটি দিয়ে আপনি এটিকে কম সুরক্ষিত (তবে প্রায়শই পরিবর্তিত হোস্ট কীগুলির জন্য আরও সুবিধাজনক) তৈরি করতে পারেন । এটি সমস্ত প্রাপ্ত হোস্ট কী বাদ দেয় যাতে এটি কখনই সতর্কতা তৈরি করে না।


18.04 সঙ্গে, একটি নতুন সম্ভাবনা রয়েছে: StrictHostKeyChecking=accept-new। থেকে man 5 ssh_config:

If this flag is set to accept-new then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to no or off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

10
এটি অন্তর্নির্মিত সুরক্ষা সরঞ্জামগুলিকে বাইপাস করায় এটি সর্বোত্তম সমাধান নয়। ssh-keyscanএটি যদি আপনার সিস্টেমে উপলব্ধ থাকে তবে এটি পছন্দনীয়।
স্টিফান লাসিউইস্কি

2
@ স্টেফানলাসিউস্কি আপনি যদি অবিশ্বস্ত নেটওয়ার্কে থাকেন তবে এটি মধ্য আক্রমণগুলিতে মানুষকে মঞ্জুরি দেয়। স্থির হোস্টগুলিতে নতুন কীগুলি স্বীকার করার জন্য, ssh-keyscanপদ্ধতিটি আরও বুদ্ধিমান। গতিশীল / পুনরায় ব্যবহৃত আইপি ঠিকানা সহ বিশ্বস্ত নেটওয়ার্কগুলিতে স্থানীয় ভার্চুয়াল মেশিন এবং অন্যান্য হোস্টগুলির জন্য, বর্ণিত পদ্ধতির যথেষ্ট ভাল।
লেকেনস্টেইন

8
কেবলমাত্র দুটি সমাধানের মধ্যে পার্থক্যটি স্পষ্ট করতে: ssh-keyscanসমাধানটি একবারে চালানো হচ্ছে এমন একটি ম্যান-ইন-মধ্য-আক্রমণে প্রবণ ssh-keyscan-oStrictHostKeyChecking=noসমাধান ম্যান-ইন--মিডিল অ্যাটাক প্রত্যেক সময় প্রবণ sshচালানো হচ্ছে।
এরিক সিজলুন্ড

121

আপনি আপনার পরিচিত_হোস্টগুলিতে কোনও সার্ভারের জন্য ফিঙ্গারপ্রিন্ট যুক্ত করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

দ্রষ্টব্য: আপনি যে সার্ভারটি যুক্ত করতে চান তার আইপি এবং ডিএনএস নামের সাথে <আইপি-ঠিকানা> এবং <হোস্টনাম> প্রতিস্থাপন করুন।

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

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

সুতরাং আপনি চালাতে পারে:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

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


1
সাজানোর মাধ্যমে এটি চালানো | ইউনিক এবং তারপরে ডাব্লিকেট হোস্ট সন্ধানের পরে ডাব্লিকেট ব্যবহার করে পরিবর্তিত হোস্টগুলি সনাক্ত করতে সক্ষম করে এবং কেবলমাত্র সেগুলি সম্পর্কে ব্যবহারকারীদের সতর্ক করে, যেহেতু বিভিন্ন কীগুলির সাথে একই হোস্টটি সমস্যার কারণ হতে পারে
লেনার্ট রোল্যান্ড

2
আপনি হয়ত একটি নোট যুক্ত করতে চান যাতে -Hহোস্ট-নেম এবং ঠিকানা রয়েছে।
ডেভিড কুলেন

25

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

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

সুবিধার জন্য স্যানিটি চেক নিষ্ক্রিয় করা খারাপ পরিকল্পনার মতো শোনাচ্ছে, এমনকি যদি আপনি ভাবেন যে আপনি পুরোপুরি পরিবেশের নিয়ন্ত্রণে আছেন।


উপরের কমান্ডটি চালানো এবং ব্যান্ডের বাইরে আপনি যে আঙুলের ছাপগুলি সংগ্রহ করেছেন তার বিরুদ্ধে হোস্ট কীগুলি পরীক্ষা না করা ঠিক ঠিক একইভাবে দুর্বলStrictHostKeyChecking no
কোড_মঙ্ক

3
@ কোড_মনক: না, তা নয়। আমি ব্যর্থতার জন্য এক-অফ সুযোগ খোলে (পরিচিত হোস্টগুলিতে যুক্ত করার জন্য একটি ভুল হোস্টের একটি চাবি গ্রহণ করা)। স্ট্রাইকহস্টকিচি যাচাই করা অন্য মেশিনগুলির জন্য পুনরাবৃত্তি গ্রহণের অনুমতি দেবে না
Tink

0

সার্ভারের একটি তালিকা স্বয়ংক্রিয়ভাবে যুক্ত করতে আমরা নীচে করতে পারি:

ফাইল সার্ভার-তালিকায় সার্ভার আইপি যুক্ত করুন

আইপিগুলি নীচের বিন্যাসে যুক্ত করা উচিত।

আউটপুট cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

আপনার প্রতিস্থাপন করে উপরের আইপিগুলি পরিবর্তন করুন।

নীচে কমান্ড তালিকা থেকে সমস্ত সার্ভার যুক্ত করবে।

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.