সার্ভারে একটি ssh অনুমোদিত কী সরানোর কমান্ড


30

সার্ভারে একটি ssh কী অপসারণ করার জন্য একটি আদেশ (বা একটি লাইনার) আছে? Ssh-copy-id এর বিপরীত কিছু?


2
কিছু এসএসএইচ সার্ভার সফ্টওয়্যার অনুমোদিত এসএসএইচ কী পরিচালনার জন্য আরএফসি 4819 প্রোটোকল সমর্থন করে তবে লিনাক্সে এটি প্রায় বিরল নয় :(
গ্রাভিটি

3
দুর্দান্ত প্রশ্ন, কী ঘোরানোর সুবিধার্থে এটি ssh-copy-id এর কার্যকারিতা হারিয়েছে।
জাবুজ্জামান

1
এটি লক্ষণীয় যে ssh-keygenএটি-R থেকে কীগুলি সরিয়ে ফেলার বিকল্প সরবরাহ করেknown_hosts , তবে দুঃখের ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keysসাথে কাজ করে না। পরিবর্তে আমি sedনীচের বিকল্পটি ব্যবহার করব ।
ডিজিটাল ট্রমা

উত্তর:


10

Ignatio পরামর্শ হিসাবে এটি দিয়ে সম্পন্ন করা যেতে পারে grep -v

এখানে একটি উদাহরণ রয়েছে যা এতে থাকা কীটি সরিয়ে দেয় some unique stringবা authorized_keysযখন অন্য কোনও কী অবশিষ্ট থাকে না তখন কেবল ফাইলটি মুছে দেয় ।

if test -f $HOME/.ssh/authorized_keys; then
  if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
    cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
  else
    rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
  fi;
fi

some unique stringআপনি যে মুছে ফেলতে চান তার মধ্যে কেবল বিদ্যমান এমন কিছু দিয়ে প্রতিস্থাপন করুন ।

এসএনএসের ওলাইনার হিসাবে এটি হয়ে যায়

ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'

লিনাক্স (SLES) এবং এইচপি-ইউএক্স পরীক্ষিত T


2
নীচের উত্তর দেখুন: sedএটি করা ভাল
ওহু

25

sed একটি কমপ্যাক্ট সমাধান সরবরাহ করে:

sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys

এই মূল সংরক্ষণ করতে হবে authorized_keysসালে authorized_keys.bak। আপনি যদি ব্যাকআপটি না চান তবে কেবল এতে পরিবর্তন -i.bakকরুন -i

এমনকি আপনি একাধিক কী মুছে ফেলতে পারেন:

sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys

এখানে একমাত্র কৌতুকপূর্ণ বিষয় হ'ল রেগেক্সের বিশেষ অক্ষরগুলি এড়ানো দরকার


আপনি যদি কেবলমাত্র পাবলিক কীফাইলে (উদাহরণস্বরূপ awk '{print $2}' ~/.ssh/id_rsa.pub) বেস 64 অক্ষর ব্যবহার করেন , তবে আপনাকে কোনও বিশেষ অক্ষর থেকে বেরিয়ে আসার বিষয়ে চিন্তা করার দরকার নেই।
জুয়ান

7

নাঃ। আপনি SSH- র করতে হবে এবং ব্যবহার করব sedবা grepফাইল থেকে কী মুছে ফেলার জন্য।


ধন্যবাদ. আমি প্রশ্নটি আরও দীর্ঘ রাখব এটি দেখার জন্য যে কেউ কোনও স্ক্রিপ্টও সরবরাহ করতে পারে যা ssh-copy-id এর বিপরীতে আছে
grm

@ জিআরএম: আমি আপনাকে পরামর্শটি চিরতরে উন্মুক্ত রাখার পরামর্শ দিচ্ছি বা কমপক্ষে কোনও এসএস-আনডো-অনুলিপি-আইডি প্রয়োগ না করা পর্যন্ত! ;-)
ম্যাক্স এল।

0

ফিল ইতিমধ্যে এই প্রশ্নের উত্তর দিয়েছে তবে আমি সংযোজন করতে এবং এটি আপনার জন্য আরও সহজ করতে চাই। এবং যেহেতু আপনি ssh-copy-id বিপরীত জিজ্ঞাসা করছেন, আমি ধরে নিচ্ছি আপনি এটি অনুমোদিত মেশিনে চালাতে চান।

ssh কীতে কেবল বেস64 অক্ষর থাকে। সুতরাং আপনি সেড ডিলিমিটার হিসাবে একটি চর ব্যবহার করতে পারেন যা সেই তালিকায় নেই। আসুন '#' ব্যবহার করি।

ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"

সার্ভার আইপি দিয়ে হোস্টনাম প্রতিস্থাপন করুন।

পাসওয়ার্ড প্রমাণীকরণ বিকল্পটি পাসওয়ার্ড জিজ্ঞাসা করলে ssh ব্যর্থ হতে পারে


পাব কী-তে 'মন্তব্য' থাকতে পারে বেস 64 অক্ষর নাও থাকতে পারে। যদি এটির "#" থাকে, তবে আপনার উদাহরণটি ভঙ্গ। awk '{print $2}' ~/.ssh/id_rsa.pubকিছু sedবা grep -vতার পরিবর্তে ব্যবহার করতে পারেন ।
হুয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.