Linux เทียบเท่ากับการควบคุมระยะไกลแบบหนึ่งต่อหลายของ PowerShell


38

มาจากการดูแลของ Windows ฉันต้องการขุดลึกลงไปใน Linux (Debian) หนึ่งในคำถามที่กำลังลุกไหม้ของฉันที่ฉันไม่สามารถหาคำตอบในการค้นหาเว็บ (ไม่พบมัน) คือ: ฉันจะบรรลุการ remoting "หนึ่งต่อหลาย" ที่เรียกว่าเช่นใน PowerShell สำหรับ Windows ได้อย่างไร

หากต้องการทำลายข้อมูลพื้นฐานฉันจะพูดว่า:

มุมมองของฉันบน Linux:

  • ฉันสามารถ ssh ลงในเซิร์ฟเวอร์และพิมพ์คำสั่งของฉัน
  • ฉันได้รับผลลัพธ์ สำหรับสภาพแวดล้อมของเซิร์ฟเวอร์ 10 แห่งฉันจะต้องเขียนสคริปต์ (perl / python?) เพื่อส่งคำสั่งสำหรับแต่ละเซิร์ฟเวอร์หรือไม่

ประสบการณ์ของฉันจาก Windows:

  1. ฉันพิมพ์คำสั่งของฉันและด้วยคำสั่ง "เรียกใช้คำสั่ง" ฉันสามารถ "ส่ง" สิ่งนี้ไปยังเซิร์ฟเวอร์จำนวนมาก (อาจมาจากไฟล์ข้อความ) เพื่อดำเนินการพร้อมกันและรับผลลัพธ์กลับมา (เป็นวัตถุสำหรับการทำงานต่อไป)

  2. ฉันยังสามารถสร้างหลายเซสชันการเชื่อมต่อถูกเก็บไว้ในพื้นหลังและเลือกส่งคำสั่งไปยังเซสชันเหล่านี้และรีโมทเข้าและออกอย่างที่ฉันต้องการ

(ฉันเคยได้ยินพ่อครัวหุ่นเชิดและอื่น ๆ นี่เป็นอย่างนั้นเหรอ?)


Update 2019:
หลังจากลองมาก - ฉันแนะนำRex (ดูความคิดเห็นด้านล่างนี้ ) - ติดตั้งง่าย (มีประสิทธิภาพก็แค่ต้องการ ssh ไม่มีอะไรอื่น) และใช้ (ถ้าคุณรู้ว่าperlเล็กน้อยดียิ่งขึ้น แต่มันก็เป็นตัวเลือก)
กับRex (ify )คุณสามารถทำคำสั่งadhocและเลื่อนไปยังการจัดการการกำหนดค่าจริง(... ความหมาย: มันเป็น CM ในสถานที่แรก แต่ดีสำหรับงาน adhoc เช่นกัน) เว็บไซต์ตะเข็บล้าสมัย แต่ในปัจจุบัน (ณ วันที่ 01/2019) มันอยู่ในการพัฒนาอย่างแข็งขันและ IRC-Channel ก็เปิดใช้งานเช่นกัน

ด้วย Windows ใหม่opensshมีความเป็นไปได้มากยิ่งขึ้น

คุณสามารถลอง: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'


ssh แบบขนานอาจทำได้: serverfault.com/questions/2533/…
rogerdpack

MobaXTerm รองรับ "multi-execution" ในหลาย ๆ เซสชัน ssh: mobaxterm.mobatek.net/features.html (เลื่อนลง) นอกจากนี้หากสภาพแวดล้อมเวิร์กสเตชันหลักของคุณคือ Windows มันก็เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเชื่อมต่อกับกล่อง Linux และอีกมากมาย
Kev

ด้วย tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

คำตอบ:


50

สรุป

  • Ansible เป็นเครื่องมือ DevOps ที่สามารถทดแทน PowerShell ได้อย่างมีประสิทธิภาพ
  • RunDeck เป็นส่วนต่อประสานกราฟิกเป็นประโยชน์
  • บางคนใช้ RunDeck + Ansible ด้วยกัน

clusterssh

สำหรับการส่งคำสั่งระยะไกลไปยังเซิร์ฟเวอร์หลายเครื่องสำหรับผู้เริ่มต้นฉันอยากจะแนะนำกลุ่ม

วิธีติดตั้งclustersshใน Debian:

apt-get install clusterssh

กวดวิชาอีกกลุ่ม :

ClusterSSH เป็นเสื้อคลุม Tk / Perl รอบ ๆ เครื่องมือ Linux มาตรฐานเช่น XTerm และ SSH ดังนั้นมันจะทำงานบนระบบปฏิบัติการ POSIX ที่มีไลบรารีอยู่ - ฉันใช้บน Linux, Solaris และ Mac OS X ต้องใช้ Perl Perl Tk (perl-tk บน Debian หรือ Ubuntu) และ X11 :: โปรโตคอล (libx11-protocol-perl บน Debian หรือ Ubuntu) นอกเหนือจาก xterm และ OpenSSH

เบิ้ล

สำหรับกรอบระยะไกลสำหรับการบริหารระบบหลาย ๆ อันAnsibleเป็นทางเลือกที่น่าสนใจมากสำหรับ Puppet มันบางกว่าและไม่จำเป็นต้องใช้เอเจนต์ระยะไกลเฉพาะเนื่องจากทำงานเหนือ SSH (RedHat ถูกซื้อด้วย)

Playbooks นั้นซับซ้อนกว่าตัวเลือกบรรทัดคำสั่ง

อย่างไรก็ตามในการเริ่มใช้ Ansible คุณต้องติดตั้งง่ายและตั้งค่าไฟล์ข้อความรายชื่อลูกค้า

หลังจากนั้นเมื่อต้องการเรียกใช้คำสั่งในเซิร์ฟเวอร์ทั้งหมดมันก็ง่ายเหมือนการทำ:

ansible all -m command -a "uptime"

เอาต์พุตยังมีการจัดรูปแบบและแยกกันอย่างมากต่อกฎ / เซิร์ฟเวอร์และในขณะที่รันในพื้นหลังสามารถเปลี่ยนเส้นทางไปยังไฟล์และปรึกษาได้ในภายหลัง

คุณสามารถเริ่มด้วยกฎง่ายๆและการใช้ Ansible จะน่าสนใจมากขึ้นเมื่อคุณเติบโตใน Linux และโครงสร้างอินฟาเรดของคุณจะใหญ่ขึ้น เช่นนี้จะทำมากกว่า PowerShell

ตัวอย่างเช่น Playbook ที่ง่ายมากในการอัพเกรดเซิร์ฟเวอร์ Linux ที่ฉันเขียน:

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

นอกจากนี้ยังมีโมดูลที่กำหนดไว้มากมายที่ให้คุณเขียนนโยบายที่ครอบคลุมได้อย่างง่ายดาย

ดัชนีโมดูล - เอกสารอธิบาย

นอกจากนี้ยังมีศูนย์ / เครือข่ายทางสังคมที่น่าสนใจอย่างเป็นทางการ / แหล่งเก็บข้อมูลเพื่อค้นหานโยบายที่สร้างขึ้นโดยชุมชนแล้ว Ansible Galaxy

เบิ้ลยังเป็นที่ใช้กันอย่างแพร่หลายและคุณจะพบจำนวนของโครงการใน GitHub เช่นนี้จากตัวเองสำหรับการติดตั้ง FreeRadius

ในขณะที่ Ansible เป็นเฟรมเวิร์กโอเพนซอร์ซฟรี แต่ก็มีอินเทอร์เฟซบนแผงเว็บแบบชำระเงินAnsible Towerแม้ว่าการออกใบอนุญาตค่อนข้างแพง

ปัจจุบันหลังจาก RedHat ซื้อมันหอนอกจากนี้ยังมีรุ่นเปิดแหล่งที่มารู้จักกันในนามAWX

เป็นโบนัส Ansible ยังสามารถดูแลเซิร์ฟเวอร์ Windows ได้แม้ว่าฉันไม่เคยใช้มันมาก่อน

นอกจากนี้ยังสามารถจัดการอุปกรณ์ระบบเครือข่าย (เราเตอร์สวิตช์และไฟร์วอลล์) ซึ่งทำให้เป็นโซลูชันที่น่าสนใจอย่างมากเนื่องจากโซลูชันการเปลี่ยนคีย์อัตโนมัติ

วิธีการติดตั้ง Ansible

Rundeck

อีกครั้งสำหรับกรอบระยะไกลที่ง่ายต่อการใช้งาน แต่ไม่ได้มีศักยภาพเป็นเบิ้ลผมไม่แนะนำให้Rundeck

มันเป็นอินเทอร์เฟซแบบกราฟิกที่มีผู้ใช้หลายคน / เข้าสู่ระบบที่มีประสิทธิภาพมากซึ่งคุณสามารถทำงานประจำวันทั่วไปของคุณได้อย่างอัตโนมัติ

เมื่อรันคำสั่งคำสั่งนี้ยังช่วยให้คุณมีหน้าต่างที่มีเอาต์พุตแยกตามเซิร์ฟเวอร์ / งาน

สามารถเรียกใช้งานหลาย ๆ งานในพื้นหลังได้อย่างราบรื่นและช่วยให้คุณเห็นรายงานและผลลัพธ์ในภายหลัง

ภาพ rundeck

วิธีการติดตั้ง RunDeck

โปรดทราบว่ามีผู้ที่ใช้ Ansible + RunDeck เป็นเว็บอินเตอร์เฟส ไม่ใช่ทุกกรณีที่เหมาะสมสำหรับเรื่องนั้น

นอกจากนี้ยังไม่มีการบอกว่าการใช้ Ansible และ / หรือ RunDeck สามารถตีความได้ว่าเป็นรูปแบบหรือส่วนหนึ่งของเอกสารโครงสร้างพื้นฐานและเมื่อเวลาผ่านไปจะอนุญาตให้ทำซ้ำและปรับปรุงการกระทำ / สูตร / Playbooks

สุดท้ายพูดถึงเซิร์ฟเวอร์คำสั่งกลางฉันจะสร้างขึ้นมาสำหรับงาน จริงๆแล้วศัพท์เทคนิคคือกล่องกระโดด 'กล่องกระโดดปรับปรุงความปลอดภัยถ้าคุณพวกเขาตั้งขึ้นทางขวา


1
Ansible เป็นโซลูชันที่ยอดเยี่ยมเมื่อเทียบกับสคริปต์หรือยูทิลิตี้บางตัวซึ่งออกอากาศคำสั่งไปยังเซิร์ฟเวอร์ SSH หลายเครื่องเท่านั้น Ansible ทำเช่นนั้น (และเหมาะสมกับวัตถุประสงค์นั้นมากกว่า Puppet หรือ Chef) แต่ยังให้คุณมีตัวเลือกในการบรรลุวัตถุประสงค์ของคุณในวิธีที่ดีกว่าเช่นการใช้โมดูลในตัวเพื่อติดตั้งบางอย่าง idempotently แทนที่จะส่งคำสั่งติดตั้ง และหวังสิ่งที่ดีที่สุด
JBentley

24

หากคุณต้องการที่จะทำมันแบบโต้ตอบคุณสามารถใช้terminatorซึ่งช่วยให้การออกอากาศคำสั่งไปยังหลายขั้ว

ป้อนคำอธิบายรูปภาพที่นี่

ดู: ฉันจะรันคำสั่ง linux เดียวกันในแท็บ / เชลล์มากกว่าหนึ่งรายการพร้อมกันได้อย่างไร


น่ารำคาญมากเมื่อคุณกดปุ่มลัดสำหรับคุณสมบัตินี้โดยไม่ตั้งใจ ... :)
ไปป์

วิธีเดียวกันกับ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
ฉันขอแนะนำให้พิมพ์ชื่อเซิร์ฟเวอร์ก่อนที่จะส่งออก การเรียกใช้สคริปต์แบบขนานนั้นยังนำมาซึ่งนิสัยใจคออื่น ๆ เช่นการคลำหาผลลัพธ์ของสคริปต์ - ต้องใช้มาตรการพิเศษเพื่อรักษากิจกรรมของผลลัพธ์ การรันแต่ละงานในเบื้องหน้ายังมีความเป็นไปได้ของการป้อนข้อมูลที่น้อย
Rui F Ribeiro

3

หากคุณใช้ KDE นี่เป็นอีกวิธีหนึ่ง
- เปิดหน้าต่าง Konsole
สำหรับแต่ละเซิร์ฟเวอร์ที่คุณต้องการสื่อสารกับ:
- เปิดแท็บ
- สร้างการเชื่อมต่อ ssh กับเซิร์ฟเวอร์
ในเมนู "แก้ไข" เลือก "คัดลอกอินพุต" เป็น "แท็บทั้งหมด"

ทุกคำสั่งที่คุณป้อนในแท็บนั้นจะถูกคัดลอกไปยังเซิร์ฟเวอร์ทั้งหมด
คุณสามารถสลับจากแท็บหนึ่งไปอีกแท็บหนึ่งเพื่อดูผลลัพธ์ที่แตกต่างกัน

หมายเหตุ: ป้ายกำกับเมนูของฉัน (ในเครื่องหมายคำพูด) อาจผิดเนื่องจากฉันไม่ได้ใช้ KDE เวอร์ชันภาษาอังกฤษ


1

GNU ขนาน

ช่วยให้คุณสามารถสร้างโปรไฟล์ "prod" ซึ่งจะมีรายชื่อเซิร์ฟเวอร์และสวิตช์ทั่วไปจากนั้นเพียงแค่เพิ่มคำสั่งที่คุณต้องการและคุณก็พร้อมที่จะคัดลอกไฟล์ไปยัง เซิร์ฟเวอร์จะทำการลบโดยอัตโนมัติในตอนท้ายและมันก็ค่อนข้างสะดวกสำหรับสคริปต์ที่ใหญ่กว่าและมันก็เร็วมาก

ปัญหาเดียวก็คือมันมีตัวเลือกมากมาย;) แต่เอกสารประกอบมีตัวอย่างมากมายดังนั้นคุณสามารถดูได้ตั้งแต่เริ่มต้น


2
สวัสดียินดีต้อนรับสู่ Linux และ Linux มีคนให้สคริปต์โดยใช้ gnu-parallel แล้วมีตัวอย่าง ฉันแนะนำให้คุณมองไปรอบ ๆ คำตอบที่ซับซ้อนมากขึ้นจะได้รับการชื่นชมและจะให้คะแนนมากขึ้น
Rui F Ribeiro

1
@RuiFRibeiro ขอโทษที่ฉันไม่ได้สังเกตเห็นข้อบกพร่องของแอพ android android พร้อมกล่องรหัสและฉันไม่สามารถเห็นเนื้อหาส่วนใหญ่ได้ (มันสร้างพื้นที่ว่างเปล่าสีขาว) ที่คุณกล่าวถึง GNU ขนานจะอึกอักเอาท์พุท - มันสามารถเขียนมันในการสั่งซื้อ แต่คุณต้องบอกให้ทำเช่นนั้น :)
alkuzad

ใช่ฉันไม่คุ้นเคย แต่สงสัยแล้วดังนั้นการกล่าวถึงคำตอบจำเป็นต้องได้รับการปรับปรุง ขอบคุณ ไม่มีอะไรที่ป้องกันไม่ให้คุณเขียนคำตอบที่ดีกว่าในเรื่องนี้อย่างไรก็ตามสำหรับความคิดเห็นฉันขอแนะนำให้แสดงความคิดเห็นในคำตอบนั้น
Rui F Ribeiro

1

ฉันต้องการพูดถึง "Rex" ที่นี่เช่นกัน: https://www.rexify.org/

มันเป็นเครื่องมือที่ยอดเยี่ยมที่ใช้perl + ssh (ผู้ใช้ / รหัสผ่านหรือการรับรองความถูกต้องของคีย์) และเนื่องจาก perl ถูกติดตั้งในทุกระบบลินุกซ์ (?!) ฉันคิดว่ามันดูเป็นธรรมชาติมากกว่าที่จะใช้

คุณสามารถเรียกใช้คำสั่ง adhoc บนเซิร์ฟเวอร์หลายเครื่องพร้อมกัน (server1, server2, เซิร์ฟเวอร์ ... - หลังจากตั้งค่าการรับรองความถูกต้องหรือใช้พารามิเตอร์ -p / -u และ -s / -S สำหรับการดำเนินการ sudo ของคำสั่ง):

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

หรือสร้างไฟล์ที่คุณระบุ "งาน" ที่แตกต่างกันและเรียกพวกเขาจากที่นั่น

$ rex -f myConfigFile.rex uptime

สามารถติดตั้งผ่านที่เก็บหรือแม้กระทั่งกับ perls cpan (หรือcpanm Rex)และการตั้งค่าเริ่มต้นนั้นง่ายมากโปรดดูที่:
- https://www.rexify.org/หรือ
- https://www.rexify.org/docs/guides/ start_using__r__ex.htmlและ
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.