Linux - Menjalankan Perintah yang Sama pada Banyak Mesin Sekaligus

39

Saya memiliki sekitar selusin kotak Linux yang kadang-kadang saya perlukan untuk menjalankan perintah yang sama. Apakah ada cara yang lebih mudah (atau cara otomatis) untuk melakukan ini selain dari masuk ke setiap mesin dan menjalankan perintah, satu per satu? Ini bukan perintah yang sama sepanjang waktu dan itu bukan pada waktu yang ditentukan sehingga itu bukan sesuatu yang ideal untuk alat seperti cron.

Chris Bunch
sumber
pertanyaan serupa serverfault.com/questions/17931/…
hayalci
Akhirnya daftar kanonik :)
rogerdpack

Jawaban:

12

Hm, mungkin pconsole adalah alat yang Anda inginkan.

Node
sumber
Wow, pconsole terlihat sangat keren! Saya telah menginstalnya tanpa masalah dan sepertinya sangat bagus sejauh ini. Terima kasih!
Chris Bunch
Itu juga salah satu alat favorit saya. :) np
Node
15

Ada juga ClusterSSH , yang, yah, melakukan persis seperti yang Anda pikirkan. Yay untuk penamaan deskriptif!

Jörg W Mittag
sumber
404 di SourceForge, sepertinya sekarang ada di sini di GitHub .
Pablo A
8

Anda harus memeriksa Wayang di sini adalah artikel linux.com tentang pengaturan dan penggunaannya

trent
sumber
1
Hmm, Wayang terlihat cukup menarik. Saya akan memeriksanya jika pconsole mulai mengecewakan saya, karena saya sudah menjalankannya dan lebih mudah daripada belajar bahasa Wayang. Terima kasih untuk sarannya!
Chris Bunch
Secara khusus, alat Kolektif Marionette (juga disebut mcollective, atau mco). Ini adalah bagian dari boneka yang memungkinkan Anda melakukan sesuatu pada sekelompok tuan rumah, berdasarkan fakta boneka.
Brian Minton
8

Jangan mengabaikan pssh dan dsh juga; mereka berdua sangat mirip dengan gsh yang disebutkan @Philip Durbin.

pjz
sumber
1
Ada juga "pdssh" yang serupa, tampaknya sourceforge.net/projects/pdsh
rogerdpack
8

Anda dapat mencoba Capistrano . Awalnya ini adalah alat penyebaran Rails, tetapi tumbuh untuk melakukan banyak hal dengan mesin jarak jauh.

Untuk pendekatan yang lebih lengkap untuk administrasi beberapa mesin, Anda mungkin ingin mencoba Chef .

rkj
sumber
8

Ansible memiliki kemampuan untuk melakukan perintah ad hoc dan juga dapat diperluas untuk melakukan manajemen konfigurasi penuh. Kemampuan untuk mencocokkan berdasarkan grup sangat bagus.

http://docs.ansible.com/intro_adhoc.html

Robert
sumber
ansiblebekerja dengan baik dengan ratusan mesin sekaligus atau Anda dapat membatasinya pada n mesin sekaligus
chicks
6

Saya kira saya akan menyalin dan menempelkan jawaban saya dari Stack Overflow , yang sepertinya disukai orang. . .


Masalah bagaimana menjalankan perintah pada banyak server sekaligus muncul di milis Perl suatu hari dan saya akan memberikan rekomendasi yang sama yang saya berikan di sana , yaitu menggunakan gsh: http://outflux.net/unix/ perangkat lunak / gsh

gsh mirip dengan for box in box1_name box2_name box3_namesolusi " " yang sudah diberikan tetapi saya menemukan gsh lebih nyaman. Anda mengatur file / etc / ghosts yang berisi server Anda dalam grup seperti web, db, RHEL4, x86_64, atau apa pun (man ghosts) maka Anda menggunakan grup itu ketika Anda memanggil gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Anda juga dapat menggabungkan atau memecah kelompok hantu, menggunakan web + db atau web-RHEL4, misalnya.

Saya juga akan menyebutkan bahwa walaupun saya belum pernah menggunakan shmux, situs webnya berisi daftar perangkat lunak (termasuk gsh) yang memungkinkan Anda menjalankan perintah pada banyak server sekaligus. Capistrano telah disebutkan dan (dari apa yang saya mengerti) bisa jadi ada di daftar itu juga.

Philip Durbin
sumber
5

Jika Anda berada di desktop KDE, konsole memiliki opsi "Kirim Input ke semua sesi". Ini berlaku untuk semua sesi yang dibuka di jendela konsole yang sama.

rgmarcha
sumber
5

Anda juga bisa mencoba ssh [user@]hostname [command]dan kemudian menelusuri nama-nama host.

Jason V.
sumber
2
Ini tidak benar-benar memuaskan bagian "sekaligus" (ini adalah serial, bukan secara paralel), tetapi karena tampaknya tidak menjadi persyaratan dari tubuh pertanyaan, ini mungkin juga merupakan solusi yang layak.
voretaq7
4

Lihat juga func. Func memungkinkan Anda menggunakan arsitektur modul untuk mengontrol berbagai aspek sistem, mulai dari berurusan dengan paket, untuk menjalankan perintah, dll. Ia berfungsi pada modul klien / server melalui SSL dan memiliki skema otentikasi yang cukup fleksibel juga.

Tongkat
sumber
Bersamaan dengan itu, Funcs sedang dibangun oleh Red Hat, dan kemungkinan akan digunakan secara luas dalam produk-produk Fedora / RHEL di masa depan. Ini jelas salah satu yang harus diperhatikan, karena saya harapkan ini akan menjadi solusi standar de facto untuk jenis masalah ini.
Christopher Cashell
4

Saya telah menggunakan ClusterSSH dan berfungsi. Namun, di luar sejumlah terminal, terminal ini tidak berskala baik.

Saya terkejut tidak ada yang menyebutkan xargs. Xargs sempurna untuk sebagian besar hal. Bahkan, saya sudah merasa sangat nyaman dengan itu sehingga saya tidak pernah menggunakan clusterssh lagi.

Contoh

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Mulai ulang apache di semua host web.)

JDS
sumber
untuk pengikut, -P30bagian itu berarti "menjalankan 30 dari mereka secara paralel"
rogerdpack
4

Jika Anda sudah menjadi pengguna tmux, Anda mungkin menikmati tmux-cssh (kependekan dari TMUX-C(luster)-SSH). Anda memberinya daftar nama server dan membuka jendela tmux baru dengan sesi SSH terbuka untuk setiap server di panelnya sendiri. Semua penekanan tombol disalin ke setiap jendela. Bergantung pada jumlah host, outputnya mungkin sulit dibaca.

appleshampoo
sumber
1
Tautan satu liner belum tentu berguna. Harap bersifat deskriptif. Mengapa Anda merekomendasikan alat ini?
Deer Hunter
3

Alat lainnya adalah:

RunDeck juga bisa dideskripsikan sebagai ControlTier yang ringan.

Alat-alat ini tidak hanya memberi Anda shell cluster, tetapi juga frontend web dan Anda dapat menyimpan pekerjaan Anda untuk digunakan di masa depan.

Kristen
sumber
2

Anda juga dapat mencoba Cluster SSH (cssh). Saya belum menggunakannya, tetapi ada artikel di LinuxJournal.com yang disebut "Kelola Beberapa Server Secara Efisien" yang membahasnya.

Brad Beyenhof
sumber
1

Gunakan hidangan , sederhana dan sangat kuat! Skrip ini mengubah hidup saya :) Satu skrip untuk mengatur semuanya!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

'Dish' shell ketekunan mengeksekusi perintah melalui ssh / rsh / telnet / mysql secara bersamaan pada beberapa sistem. Mengubah kata sandi, memperbarui konfigurasi, menyalin file, memeriksa status, dll. Pada ratusan node menjadi mudah. Dish mirip dengan IBM 'dsh' (shell terdistribusi) tetapi lebih jauh lagi memungkinkan eksekusi perintah secara jarak jauh yang membutuhkan otentikasi. Dibandingkan dengan paket open source lainnya yang mencakup shell yang didistribusikan (atau alat serupa) seperti ClusterIt, shell penari, shell yang didistribusikan paralel, atau C3, antena piringan ini tipis dan mudah digunakan pembungkus shell untuk kasus-kasus di mana solusi yang fleksibel diperlukan. Anda dapat menelusuri halaman manual hidangan secara online di sini.

Guillaume
sumber
1

Berikut adalah beberapa contoh menggunakan perintah yang disebutkan dalam jawaban lain:

pdsh

Dapat mengambil rentang numerik, keluaran dengan nama host terlebih dahulu, tampaknya benar-benar dipertahankan :

versi paling sederhana:

pdsh -w hostname echo done

keluaran:

hostname: done

Contoh yang lebih rumit:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

keluaran:

hostname8: done
hostname7: done
otherhost: done

Mac: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

memerlukan pengaturan shell jarak jauh jika tidak akan menggunakan "rsh" yang mungkin atau bahkan mungkin tidak tersedia.

Mac: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Mereka semua dapat mengambil daftar mesin dari file, secara opsional, juga.

Jangan ragu untuk menambahkan lebih banyak contoh di sini, ini adalah wiki komunitas

Mac: brew install pssh

Cluster SSH

Cluster SSH ("mac only version" rupanya ada dua versi yang lainnya ada di sini ) sebenarnya membuka "terminal nyata" dengan terminal besar di bagian bawah yang mengirimkan input ke yang lain. Jadi itu seperti UI yang mengirimkannya ke banyak.

Ex:

csshX hostname0[1-2] hostname3 kemudian ketik ke dalam kotak merah dan pergi ke setiap jendela terminal, satu per host, yang muncul.

mac: brew install csshx(versi lama tapi masih berfungsi)

ada juga brew install ansibleFWIW

rogerdpack
sumber