अपने पासवर्ड को कई बार टाइप करने के बजाय आप एक बार pssh
उसके -A
लिए संकेत करने के लिए और उसके स्विच का उपयोग कर सकते हैं , और फिर एक सूची में सभी सर्वरों को पासवर्ड फ़ीड कर सकते हैं।
नोट: इस पद्धति का उपयोग करने से आप इसका उपयोग नहीं कर सकते ssh-copy-id
, हालाँकि, आपको अपनी SSH पब की फ़ाइल को अपने दूरस्थ खाते की ~/.ssh/authorized_keys
फ़ाइल में जोड़ने के लिए अपनी स्वयं की विधि को रोल करना होगा ।
उदाहरण
यहाँ एक उदाहरण है जो काम करता है:
$ cat ~/.ssh/my_id_rsa.pub \
| pssh -h ips.txt -l remoteuser -A -I -i \
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 23:03:58 [SUCCESS] 10.252.1.1
[2] 23:03:58 [SUCCESS] 10.252.1.2
[3] 23:03:58 [SUCCESS] 10.252.1.3
[4] 23:03:58 [SUCCESS] 10.252.1.10
[5] 23:03:58 [SUCCESS] 10.252.1.5
[6] 23:03:58 [SUCCESS] 10.252.1.6
[7] 23:03:58 [SUCCESS] 10.252.1.9
[8] 23:03:59 [SUCCESS] 10.252.1.8
[9] 23:03:59 [SUCCESS] 10.252.1.7
उपर्युक्त स्क्रिप्ट आम तौर पर इस तरह संरचित है:
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
उच्च स्तरीय pssh
विवरण
cat <pubkey>
सार्वजनिक कुंजी फ़ाइल को आउटपुट करता है pssh
pssh
-I
STDIN के माध्यम से डेटा निगलना करने के लिए स्विच का उपयोग करता है
-l <remote user>
रिमोट सर्वर का खाता है (हम मान रहे हैं कि आपके पास आईपी फ़ाइल में सर्वरों में समान उपयोगकर्ता नाम है)
-A
pssh
अपने पासवर्ड के लिए पूछने के लिए कहता है और फिर इसे उन सभी सर्वरों के लिए पुन: उपयोग करता है जो इसे जोड़ता है
-i
pssh
फ़ाइलों में स्टोर करने के बजाय STDOUT में कोई भी आउटपुट भेजने के लिए कहता है (इसका डिफ़ॉल्ट व्यवहार)
'...cmds to add pubkey...'
- यह जो चल रहा है उसका सबसे मुश्किल हिस्सा है, इसलिए मैं इसे खुद से नीचे तोड़ दूंगा (नीचे देखें)
रिमोट सर्वर पर चलाए जा रहे कमांड
ये आदेश हैं जो pssh
प्रत्येक सर्वर पर चलेंगे:
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
क्रम में:
दूरस्थ उपयोगकर्ता के umask को 077 पर सेट करें, ऐसा इसलिए है कि जो भी निर्देशिका या फाइलें हम बनाने जा रहे हैं, उनकी अनुमतियाँ इस प्रकार निर्धारित होंगी:
$ ls -ld ~/.ssh ~/.ssh/authorized_keys
drwx------ 2 remoteuser remoteuser 4096 May 21 22:58 /home/remoteuser/.ssh
-rw------- 1 remoteuser remoteuser 771 May 21 23:03 /home/remoteuser/.ssh/authorized_keys
~/.ssh
यदि यह पहले से ही है तो निर्देशिका बनाएं और हमें अनदेखा करें
$afile
प्राधिकृत_की फ़ाइल के पथ के साथ एक चर सेट करें
cat - >> $afile
- एसटीडीआईएन से इनपुट लें और अधिकृत_की फाइल में जोड़ें
sort -u $afile -o $afile
- विशिष्ट रूप से अधिकृत_की फ़ाइल को सॉर्ट करता है और उसे बचाता है
नोट: यह अंतिम बिट उस मामले को संभालने के लिए है जहां आप एक ही सर्वर के खिलाफ कई बार ऊपर चलाते हैं। यह आपके प्यूबिक को कई बार जोड़ देने से खत्म कर देगा।
एकल टिक्स नोटिस!
इस तथ्य पर भी विशेष ध्यान दें कि ये सभी कमांड सिंगल कोट्स के अंदर नेस्टेड हैं। यह महत्वपूर्ण है, क्योंकि हम $afile
दूरस्थ सर्वर पर निष्पादित होने के बाद तक मूल्यांकन नहीं करना चाहते हैं ।
' \
..cmds... \
'
मैंने ऊपर विस्तार किया है इसलिए यहाँ पढ़ना आसान है, लेकिन मैं आम तौर पर इसे एक ही लाइन पर चलाता हूँ:
$ cat ~/.ssh/my_id_rsa.pub | pssh -h ips.txt -l remoteuser -A -I -i 'umask 077; mkdir -p ~/.ssh; afile=~/.ssh/authorized_keys; cat - >> $afile; sort -u $afile -o $afile'
बोनस सामग्री
का उपयोग करके pssh
आप फ़ाइलों के निर्माण के लिए और या तो का उपयोग कर डायनामिक कंटेंट प्रदान होने छोड़ कर सकते हैं -h <(...some command...)
या आप का एक और का उपयोग कर आईपी की एक सूची बना सकते हैं pssh
के स्विच, -H "ip1 ip2 ip3"
।
उदाहरण के लिए:
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
ऊपर मेरी ~/.ssh/config
फ़ाइल से IPs की एक सूची निकालने के लिए इस्तेमाल किया जा सकता है । आप निश्चित printf
रूप से गतिशील सामग्री भी उत्पन्न करने के लिए उपयोग कर सकते हैं:
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
उदाहरण के लिए:
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
तुम भी seq
स्वरूपित संख्या अनुक्रम उत्पन्न करने के लिए उपयोग कर सकते हैं!
संदर्भ और इसी तरह के उपकरण pssh
यदि आप उपयोग नहीं करना चाहते हैं pssh
तो मैंने ऊपर किया है तो कुछ अन्य विकल्प उपलब्ध हैं।