একাধিক লিনাক্স হোস্টে ssh সর্বজনীন কী অনুলিপি করুন


14

আমি আমাদের কেন্দ্রীয় সার্ভার থেকে একাধিক সার্ভারে .ssh / id_rsa.pub অনুলিপি করার চেষ্টা করছি। আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে যা আমি সাধারণত বিভিন্ন সার্ভারে পরিবর্তনগুলি ধাক্কা দিতে ব্যবহার করি।

#!/bin/bash


for ip in $(<IPs); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'



EOF

done

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

cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'

আপনি কেন একটি কেন্দ্রে স্থানীয় অবস্থান থেকে অনন্তর থেকে অনুলিপি করা প্রয়োজন?
ক্লার্ক

আমাকে স্থানীয় সার্ভারের জন্য কেন্দ্রীয় সার্ভারের পাবলিক কী যুক্ত করতে হবে। বিভ্রান্তির জন্য দুঃখিত.
ব্যবহারকারী 67186

উত্তর:


20

এই সাধারণ লুপের সাহায্যে আপনি এটিকে স্বয়ংক্রিয় করতে এবং সমস্ত দূরবর্তী সার্ভারে ছড়িয়ে দিতে পারেন।

#!/bin/bash
for ip in `cat /home/list_of_servers`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done

হাই, আমি আপনার অ্যাঞ্জার গ্রহণ করি এবং এটি ভাল কাজ করে। ধন্যবাদ
ব্যবহারকারী 67186

+1 টি। আমি খুব সহজ স্ক্রিপ্টিং শৈলীর একটি বড় অনুরাগী যা কাজটি সম্পন্ন করে!
লাথ লিও অ্যালোবাডি

4

এখানে প্রতিবার পাসওয়ার্ড না জিজ্ঞাসা করে একাধিক সার্ভারে ssh-keygen অনুলিপি করার জন্য আমার সহজ স্ক্রিপ্ট।

for server in `cat server.txt`;  
do  
    sshpass -p "password" ssh-copy-id -i ~/.ssh/id_rsa.pub user@$server  
done

3

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

cat add-vassal-tc-agents.sh

#!/bin/bash
set -x # enable bash debug mode
if [ -s vassal-public-key.pub ]; then # if file exists and not empty
    for ip in `cat tc-agents-list.txt`; do # for each line from the file
        # add EOL to the end of the file and echo it into ssh, where it is added to the authorized_keys
        sed -e '$s/$/\n/' -s vassal-public-key.pub | ssh $ip 'cat >> ~/.ssh/authorized_keys'
    done
else
    echo "Put new vassal public key into ./vassal-public-key.pub to add it to tc-agents-list.txt hosts"
fi

এই স্ক্রিপ্টটি মেশিনের তালিকায় থাকা ব্যবহারকারীদের জন্য নতুন কী যুক্ত করে, তবে শর্ত থাকে যে এটি চালিত পরিবেশের অ্যাক্সেস রয়েছে।

এর উদাহরণ tc-agents-list.txt:

root@10.10.0.1
root@10.10.0.2
root@10.10.0.3
root@10.10.0.4

2

আপনার সর্বজনীন কী অনুলিপি করার জন্য, আপনার কাছে খোলার মধ্যে কিছু কিছু অন্তর্নির্মিত রয়েছে। সুতরাং পরিবর্তে catএবং এটি sshব্যবহার করুন: -

ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-HOST

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

আপনি যদি সর্বজনীন কী-এর ডিফল্ট অবস্থান ব্যবহার করেন তবে -i বিকল্পটি ব্যবহার করার দরকার নেই।
লাইথ লিও অ্যালোবাডি

0

আপনি এই জাতীয় সরল-লুপ এবং এমবেডেড সার্ভার তালিকার সাহায্যে এটি করতে পারেন:

while read SERVER
do
    ssh-copy-id user@"${SERVER}"
done <<\EOF
server1
server2
server3
EOF

স্ক্রিপ্টের ভিতরে তালিকা থাকা পৃথক ডেটা ফাইলগুলি অপসারণ করে যা ভুল জায়গায় স্থান পেতে পারে।


ssh-copy-idইতিমধ্যে কিছু অন্যান্য উত্তরে পরামর্শ দেওয়া হয়েছে।
রালফ্রেডল

0

ধরে নিই যে সার্ভারের আইপি তালিকা, নাম সার্ভার, এবং সার্ভারগুলির কেবলমাত্র আইপি ঠিকানাগুলি দিয়ে আপনার একটি ফাইল রয়েছে।

এই জন্য লুপ পাশাপাশি কাজ করবে।

for user in $(awk '{print $1}' SERVER | awk '{printf "user1@""%s"(NR==0?RS:"\n"), $1}' ) ;
do
        ssh-copy-id -f -i id_rsa_k2.pub $user
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.