लिनक्स PowerShell के "एक-से-कई" रीमोटिंग के बराबर है


38

विंडोज प्रशासन से आ रहा है, मैं लिनक्स (डेबियन) में गहरी खुदाई करना चाहता हूं। मेरे एक जलते हुए प्रश्न का मैं वेब पर खोज करने का जवाब नहीं दे पाया (यह नहीं पाया) यह है: मैं विंडोज के लिए पावरशेल की तरह तथाकथित "एक-से-कई" को कैसे प्राप्त कर सकता हूं?

बुनियादी बातों के लिए इसे तोड़ने के लिए मैं कहूंगा:

लिनक्स पर मेरा विचार:

  • मैं एक सर्वर में ssh कर सकता हूं और अपनी कमांड टाइप कर सकता हूं
  • मुझे इसका फल मिलता है। 10 सर्वरों के वातावरण के लिए मुझे उनमें से प्रत्येक के लिए एक कमांड (perl / python?) स्क्रिप्ट लिखनी होगी?

विंडोज से मेरा अनुभव:

  1. मैं अपनी कमांड टाइप करता हूं और "इनवोक-कमांड" के साथ मैं इसे सर्वर के एक समूह में (शायद एक टेक्स्टफाइल से) एक साथ निष्पादित करने और परिणाम वापस पाने के लिए (आगे के काम के लिए एक वस्तु के रूप में) भेज सकता हूं।

  2. मैं कई सत्रों को भी स्थापित कर सकता हूं, कनेक्शन पृष्ठभूमि में आयोजित किया जाता है, और चुनिंदा रूप से इन सत्रों को कमांड भेजते हैं, और मुझे आवश्यकता होती है और इन जैसे रिमोट।

(मैंने शेफ, कठपुतली आदि के बारे में सुना है) क्या यह कुछ ऐसा है?


Update 2019:
बहुत कोशिश करने के बाद - मैं सुझाव देता हूं कि रेक्स ( नीचे इस टिप्पणी को देखें ) - आसान सेटअप (प्रभावी रूप से इसे बस ssh, और कुछ नहीं चाहिए) और उपयोग करें (यदि आप जानते हैं कि बस थोड़ा सा perl यह और भी बेहतर है, लेकिन यह वैकल्पिक है) Rex के
साथ (ify ) आप एडहॉक कमांड कर सकते हैं और इसे एक वास्तविक कॉन्फ़िगरेशन प्रबंधन के लिए आगे बढ़ा सकते हैं ... (अर्थ: यह पहली जगह में एक सीएम है, लेकिन एडहॉक कार्यों के लिए अच्छा है, भी) वेबसाइट सीम पुरानी है, लेकिन वर्तमान में (01/2019 तक) यह सक्रिय विकास में है और आईआरसी-चैनल भी सक्रिय है।

विंडोज के नए खुलने के साथ और भी अधिक संभावनाएं हैं

तुम कोशिश कर सकते हो: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'


समानांतर ssh यह कर सकता है: serverfault.com/questions/2533/…
rogerdpack

MobaXTerm कई ssh सत्रों में "बहु-निष्पादन" का समर्थन करता है: mobaxterm.mobatek.net/features.html (नीचे स्क्रॉल करें)। इसके अलावा अगर आपका प्राथमिक कार्य केंद्र वातावरण विंडोज है तो यह लिनक्स बॉक्स से जुड़ने के लिए एक बहुत ही प्यारा उपकरण है और बहुत कुछ।
केव

tmux के साथ: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

जवाबों:


50

सारांश

  • Ansible एक DevOps टूल है जो PowerShell के लिए एक शक्तिशाली प्रतिस्थापन है
  • एक ग्राफिक इंटरफ़ेस के रूप में RunDeck काम है
  • कुछ लोग RunDeck + Ansible को एक साथ चलाते हैं

clusterssh

कई सर्वरों को दूरस्थ कमांड भेजने के लिए, शुरुआती के लिए, मैं क्लस्टर्स की सिफारिश करूंगा

clustersshडेबियन में स्थापित करने के लिए :

apt-get install clusterssh

एक और क्लस्टर ट्यूटोरियल :

ClusterSSH XTerm और SSH जैसे मानक लिनक्स उपकरणों के आसपास एक Tk / Perl आवरण है। जैसे, यह किसी भी POSIX- कंप्लायंट OS के बारे में चलेगा, जहाँ लाइब्रेरी मौजूद हैं - मैंने इसे Linux, Solaris और Mac OS X पर चलाया है। इसके लिए पर्ल लाइब्रेरीज़ Tk की आवश्यकता है (डेबियन या उबंटू पर perl-tk) और X11 :: प्रोटोकॉल (libx11-प्रोटोकॉल-पर्ल प्रति डेबियन या उबंटू), एक्सटर्म और ओपनएसएसएच के अलावा।

Ansible

कई सिस्टम प्रशासन के लिए एक दूरस्थ ढांचे के रूप में, Ansible कठपुतली के लिए एक बहुत ही दिलचस्प विकल्प है। यह अधिक दुबला है, और इसे समर्पित दूरस्थ एजेंटों की आवश्यकता नहीं है क्योंकि यह SSH पर काम करता है (इसे RedHat द्वारा खरीदा गया है)

Playbooks कमांड लाइन विकल्पों की तुलना में अधिक विस्तृत हैं।

हालाँकि, Ansible का उपयोग शुरू करने के लिए आपको एक सरल इंस्टॉलेशन की आवश्यकता होती है और क्लाइंट सूची टेक्स्ट फ़ाइल को सेटअप करने के लिए।

बाद में, सभी सर्वरों में कमांड चलाने के लिए, यह करना जितना आसान है:

ansible all -m command -a "uptime"

आउटपुट भी बहुत अच्छी तरह से स्वरूपित होता है और प्रति नियम / सर्वर से अलग होता है, और पृष्ठभूमि में इसे चलाते समय एक फ़ाइल पर रीडायरेक्ट किया जा सकता है और बाद में परामर्श किया जा सकता है।

आप सरल नियमों से शुरू कर सकते हैं, और जैसे ही आप लिनक्स में बढ़ते हैं, तो Ansible का उपयोग अधिक दिलचस्प हो जाएगा, और आपका इन्फ्रा-स्ट्रक्चर बड़ा हो जाएगा। जैसे कि यह PowerShell की तुलना में बहुत अधिक करेगा।

उदाहरण के लिए, लिनक्स सर्वर को उन्नत करने के लिए एक बहुत ही सरल प्लेबुक जो मैंने लिखी थी:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

इसमें कई मॉड्यूल भी परिभाषित हैं जो आपको आसानी से व्यापक नीतियां लिखने देते हैं।

मॉड्यूल इंडेक्स - Ansible प्रलेखन

समुदाय द्वारा पहले से ही बनाई गई नीतियों को खोजने के लिए इसे रिपॉजिटरी का एक दिलचस्प आधिकारिक हब / "सोशल" नेटवर्क भी मिला है। Ansible गैलेक्सी

Ansible का व्यापक रूप से उपयोग किया जाता है, और आपको बहुत सारे प्रोजेक्ट मिलेंगे, जैसे कि यह FreeRadius सेटअप के लिए अपने आप से एक है ।

जबकि Ansible एक मुक्त स्रोत स्रोत है, इसमें एक सशुल्क वेब पैनल इंटरफ़ेस भी है, Ansible टॉवर हालांकि लाइसेंसिंग महंगा है।

आजकल, RedHat ने इसे खरीदने के बाद, टॉवर में AWX के रूप में जाना जाने वाला खुला स्रोत संस्करण भी है ।

एक बोनस के रूप में, Ansible Windows सर्वर को प्रशासित करने में भी सक्षम है, हालांकि मैंने इसके लिए कभी इसका उपयोग नहीं किया है।

यह नेटवर्किंग उपकरण (राउटर, स्विच, और फ़ायरवॉल) को प्रशासित करने में भी सक्षम है, जो इसे ऑटोमेशन टर्निंग सॉल्यूशन समाधान के रूप में एक बहुत ही रोचक समाधान बनाता है।

कैसे स्थापित करने के लिए

Rundeck

फिर भी, फिर से उपयोग करने के लिए एक दूरस्थ रूपरेखा के लिए, लेकिन इतना सक्षम के रूप में शक्तिशाली नहीं है, मैं Rundeck की सिफारिश करते हैं

यह एक बहुत ही शक्तिशाली बहु-उपयोगकर्ता / लॉगिन ग्राफ़िकल इंटरफ़ेस है जहाँ आप अपने आम दिनों के कार्यों को बहुत अधिक स्वचालित कर सकते हैं, और यहां तक ​​कि लोगों को sysops या हेल्पडेस्क के विचारों पर पानी पिला सकते हैं।

कमांड चलाते समय, यह आपको सर्वर / कार्य द्वारा टूटे हुए आउटपुट के साथ विंडो भी देता है।

यह मूल रूप से पृष्ठभूमि में कई नौकरियां चला सकता है, और आपको बाद में रिपोर्ट और आउटपुट देखने की अनुमति देता है।

rundeck छवि

RunDeck को कैसे स्थापित करें

कृपया ध्यान दें कि वेब इंटरफ़ेस के रूप में Ansible + RunDeck चलाने वाले लोग हैं; उसके लिए सभी मामलों को विनियोजित नहीं किया जाता है।

यह भी बिना यह कहे चला जाता है कि Ansible और / या RunDeck का उपयोग करके इनफ़्रा-स्ट्रक्चर डॉक्यूमेंटेशन के एक रूप या भाग के रूप में काम किया जा सकता है, और समय के साथ कार्यों / व्यंजनों / Playbooks को दोहराने और सुधारने की अनुमति देता है।

अंत में, एक केंद्रीय कमांड सर्वर के बारे में बात करते हुए, मैं कार्य के लिए सिर्फ एक बनाऊंगा। दरअसल तकनीकी शब्द एक जंप बॉक्स है। 'जंप बॉक्स' सुरक्षा में सुधार करते हैं, अगर आप उन्हें सही सेट करते हैं


1
Ansible एक महान समाधान बनाम कुछ स्क्रिप्ट या उपयोगिता है जो केवल एक कमांड को कई SSH सर्वरों में प्रसारित करता है। Ansible करता है (और कठपुतली या रसोइये की तुलना में उस उद्देश्य के लिए एक बेहतर फिट है), लेकिन यह आपको बेहतर तरीके से अपने उद्देश्य को प्राप्त करने का विकल्प भी देता है जैसे कि अंतर्निहित मॉड्यूल का उपयोग करके केवल स्थापित कमांड भेजने के बजाय कुछ सुखद तरीके से स्थापित करने के लिए और अच्छे के लिए उम्मीद कर रहा हूँ।
JBentley

24

यदि आप इसे अंतःक्रियात्मक रूप से करना चाहते हैं, तो आप terminatorकई टर्मिनलों पर एक कमांड प्रसारित करने की अनुमति दे सकते हैं ।

यहाँ छवि विवरण दर्ज करें

देखें: मैं एक साथ एक से अधिक टैब / शेल में एक ही लिनक्स कमांड कैसे चला सकता हूं?


जब आप गलती से इस सुविधा के लिए शॉर्टकट मारते हैं तो बहुत गुस्सा आता है ... :)
पाइप

उसी तरह से tmuxऔर Crtl + b:set sync on

12

आप pssh(या parallel-ssh) का उपयोग कर सकते हैं , जो एक SSH क्लाइंट है जो मेजबानों की सूची से जुड़ता है और समानांतर रूप से सभी होस्ट पर कमांड निष्पादित करता है:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

11

शायद आप अपने लक्ष्य को एक साधारण zsh (bash) फ़ंक्शन के साथ प्राप्त कर सकते हैं। मान लीजिए कि आपके पास सर्वर l61 l62 l63 है और आपको अक्सर उन पर कमांड चलाने की आवश्यकता होती है:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

तो, कमांड लाइन में:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64

5
मैं उनके आउटपुट से पहले सर्वर का नाम प्रिंट करने की सलाह दूंगा। स्क्रिप्ट को समानांतर पर चलाने से अन्य क्विर्क भी आते हैं, जैसे स्क्रिप्ट के आउटपुट को लड़खड़ाना - आउटपुट की गतिविधि को संरक्षित करने के लिए अतिरिक्त उपाय करना। अग्रभूमि में प्रत्येक कार्य को चलाने से न्यूनतम इनपुट इंटरैक्शन की संभावना भी होती है।
रुई एफ रिबेरो

3

यदि आप KDE का उपयोग कर रहे हैं, तो यहां एक और तरीका है।
- एक कंसोल विंडो खोलें।
प्रत्येक सर्वर जिसके साथ आप संवाद करना चाहते हैं:
- एक टैब खोलें
- सर्वर के साथ ssh कनेक्शन स्थापित
करें "संपादित करें" मेनू में, "कॉपी इनपुट" को "सभी टैब" के लिए चुनें।

उस टैब में आपके द्वारा दर्ज किया गया प्रत्येक कमांड सभी सर्वरों पर कॉपी किया जाएगा।
विभिन्न परिणामों को देखने के लिए आप टैब से टैब पर स्विच कर सकते हैं।

नोट: मेरे मेनू लेबल (उद्धरण में) गलत हो सकते हैं क्योंकि मैं केडीई के अंग्रेजी संस्करण का उपयोग नहीं करता हूं


1

जीएनयू समानांतर

यह सहेजे गए सेटिंग्स के साथ सरल एक-लाइनर्स की अनुमति देता है, इसलिए आप एक प्रोफ़ाइल बना सकते हैं, "ठेस", जिसमें एक सर्वर और सामान्य स्विच होंगे। फिर बस वह कमांड जोड़ें जिसे आप चाहते हैं, और आप तैयार हैं। यह फ़ाइलों की प्रतिलिपि भी बना सकता है। सर्वर और स्वचालित रूप से अंत में उन्हें हटा देता है, और यह बहुत बड़ी स्क्रिप्ट के लिए बहुत सुविधाजनक है। इसके अलावा यह बहुत तेज है।

एकमात्र समस्या यह है कि इसके इतने सारे विकल्प हैं;) लेकिन प्रलेखन में बहुत सारे उदाहरण भी शामिल हैं, इसलिए आप शुरुआत में उन्हें देख सकते हैं।


2
नमस्ते, लिनक्स और लिनक्स में आपका स्वागत है। किसी ने पहले से ही गनु-समानांतर का उपयोग करके एक स्क्रिप्ट दी थी, जिसका एक उदाहरण है। मैं आपको सलाह देता हूं कि चारों ओर एक नज़र डालें, अधिक विस्तृत जवाब की सराहना की जाती है, और आपको अधिक अंक देंगे।
रुई एफ रिबेरो

1
@RuiFRibeiro क्षमा करें, मैंने नोटिस नहीं किया, तो कोड बॉक्स के साथ एसओ एंड्रॉइड ऐप बग और मैं अधिकांश सामग्री नहीं देख सका (यह रिक्त सफेद स्थान उत्पन्न करता है)। आपने उल्लेख किया कि ग्नू-पैरेलल फंबल आउटपुट है - इसे क्रम में लिख सकते हैं लेकिन आपको इसे ऐसा करने के लिए कहना होगा :)
अलकुज़ाद

हां, मैं इससे परिचित नहीं हूं, लेकिन पहले से ही संदेह है, इसलिए उत्तर का उल्लेख करना सुधार की आवश्यकता है। धन्यवाद। कुछ भी नहीं आपको इसके चारों ओर एक बेहतर उत्तर लिखने से रोकता है, हालांकि टिप्पणी करने के लिए, मैं उस उत्तर में टिप्पणी करने की सलाह देता हूं।
रुई एफ रिबेरो

1

मैं यहाँ "रेक्स" का उल्लेख करना चाहता हूँ: https://www.rexify.org/

इसका एक भयानक उपकरण है जो perl + ssh (उपयोगकर्ता / पासवर्ड या कुंजी प्रमाणीकरण) का उपयोग करता है और क्योंकि perl हर (?!) लिनक्स सिस्टम पर स्थापित है, मुझे लगता है कि इसका उपयोग करना अधिक स्वाभाविक लगता है (इसमें Ansible & Co. के साथ कुछ समानताएं हैं)

आप एक साथ कई सर्वरों (सर्वर 1, सर्वर 2, सर्वर ... पर एडहॉक कमांड चला सकते हैं - प्रमाणीकरण स्थापित करने के बाद, या वैकल्पिक रूप से -p / -u पैरामीटर और कमांड के sudo निष्पादन के लिए -s / -S का उपयोग करें):

$ rex -H "server[1..3]" -e 'say run "uptime"'

या एक फ़ाइल बनाएं जहाँ आप अलग-अलग "कार्य" निर्दिष्ट करते हैं और उन्हें वहां से बुलाते हैं

$ rex -f myConfigFile.rex uptime

इसे रिपॉजिटरी के माध्यम से या पर्ल्स cpan (या cpanm Rex) के साथ भी इंस्टॉल किया जा सकता है और यह शुरुआती सेटअप आसान है, देखें:
- https://www.rexify.org/ या
- https://www.rexify.org/docs/guides/ start_use__r__ex.html और
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

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