कई लिनक्स होस्ट के लिए 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'

जब से आप एक केंद्रीय स्थान से रीमोट करने के लिए कॉपी किए गए हैं, तो आपको स्थानीय पर कैट करने की आवश्यकता क्यों है?
21

मुझे केंद्रीय सर्वर की सार्वजनिक कुंजी इसलिए स्थानीय सर्वर को जोड़ना होगा। गलतफहमी के लिए खेद है।
user67186

जवाबों:


20

इस सरल लूप के साथ आप इसे स्वचालित कर सकते हैं और सभी दूरस्थ सर्वरों में फैल सकते हैं।

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

नमस्ते, मैं आपके awser को स्वीकार करता हूं और यह ठीक काम किया है। धन्यवाद
user67186

+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

मैं केंद्रीय सर्वर की जनता की नकल करने वाली कमांड को रिमोट सर्वर पर लागू करना चाहता हूं जो आईपी फाइल में मौजूद है। स्क्रिप्ट उनके माध्यम से पुनरावृति करती है। इसलिए, आपका उदाहरण यहां उपयोगी नहीं हो सकता है। धन्यवाद
user67186

यदि आप सार्वजनिक कुंजी के डिफ़ॉल्ट स्थान का उपयोग कर रहे हैं, तो मुझे -i विकल्प का उपयोग करने की कोई आवश्यकता नहीं है।
लैथ लियो अलबोएडी

0

आप इस तरह से एक साधारण समय-पाश और एम्बेडेड सर्वर सूची के साथ कर सकते हैं:

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

स्क्रिप्ट के अंदर की सूची अलग डेटा फ़ाइलों के साथ दूर होती है जो गलत हो सकती है।


ssh-copy-idपहले से ही कुछ अन्य उत्तरों में सुझाव दिया गया है।
राल्फफ्राइडल

0

मान लें कि आपके पास सर्वर IP सूची के साथ एक फ़ाइल है, SERVER नाम है, और सर्वरों के सिर्फ आईपी पते परिभाषित हैं।

इस के लिए लूप के रूप में अच्छी तरह से काम करेगा।

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.