Ada daftar alamat IP dalam file .txt, mis .:
1.1.1.1
2.2.2.2
3.3.3.3
Di belakang setiap alamat IP ada server, dan pada setiap server ada sshd yang berjalan pada port 22. Tidak setiap server ada dalam known_hosts
daftar (pada PC saya, Ubuntu 10,04 LTS / bash).
Bagaimana saya bisa menjalankan perintah di server ini, dan mengumpulkan output?
Idealnya, saya ingin menjalankan perintah secara paralel di semua server.
Saya akan menggunakan otentikasi kunci publik di semua server.
Berikut adalah beberapa jebakan potensial:
- Ssh meminta saya untuk memasukkan kunci ssh server yang diberikan ke
known_hosts
file saya . - Perintah yang diberikan mungkin mengembalikan kode keluar bukan nol, yang menunjukkan bahwa output berpotensi tidak valid. Saya perlu mengenali itu.
- Sambungan mungkin gagal dibuat ke server yang diberikan, misalnya karena kesalahan jaringan.
- Harus ada batas waktu, jika perintah berjalan lebih lama dari yang diharapkan atau server turun saat menjalankan perintah.
Servernya AIX / ksh (tapi saya pikir itu tidak masalah.
ssh
scripting
parallelism
LanceBaynes
sumber
sumber
Jawaban:
Dengan asumsi bahwa Anda tidak dapat menginstal pssh atau orang lain, Anda dapat melakukan sesuatu yang mirip dengan:
sumber
-o StrictHostKeyChecking=no
untuk menghindari ini. Namun lebih baik untuk memindai semua server dari baris perintah terlebih dahulu sehingga kunci host dapat ditambahkan.wait
perintah mengambil kembali sumber daya tersebut, termasuk kode proses kembali (bagaimana proses-proses yang keluar). Kemudian jika nanti dalam program, Anda meletakkan proses lain, katakanlah kompresi, di latar belakang dan perlu menunggu untuk itu, maka tanpa loop ini, menunggu akan mendapatkan kembali salah satu program ssh yang selesai, bukan kompresi - yang mungkin masih sedang berlari. Anda akan mendapatkan status pengembalian pada proses anak yang salah. Adalah baik untuk membersihkan setelah dirimu sendiri.Ada beberapa alat di luar sana yang memungkinkan Anda untuk masuk dan menjalankan serangkaian perintah pada banyak mesin secara bersamaan. Berikut adalah pasangannya:
sumber
Jika Anda menyukai Python scripting lebih dari
bash
scripting, maka Fabric mungkin menjadi alat untuk Anda.Dari halaman beranda Fabric :
sumber
Saya memang menggunakan GNU parallel untuk itu, paling khusus Anda bisa menggunakan resep ini :
Dengan
your.txt
menjadi file dengan alamat IP server / nama.sumber
ssh
ada juga, tetapi Anda perlu beberapa cara untuk login ke komputer lain dan cara-cara yang dulu kurang aman (sepertirsh
). Anda tidak menggambarkan apa yang Anda gunakan sekarang untuk berpindah dari satu mesin ke mesin lainnya (telnet
?,rsh
?).Setup yang sangat dasar:
Mengautentikasi dengan nama / kata sandi sebenarnya bukan ide yang bagus. Anda harus mengatur kunci pribadi untuk ini:
sumber
ssh $host $command
untuk setiap host. Cobalah untuk menjalankan perintah-perintah itu secara manual untuk mencari tahu apa yang sedang terjadi.Saya sarankan Ansible.cc . Ini adalah manajer konfigurasi dan dispatcher perintah.
sumber
Saya pikir Anda sedang mencari pssh dan versi paralel terkait dari scp, rsync, dll.
sumber
Saya membangun alat open-source bernama Overcast untuk mempermudah hal ini.
Pertama, Anda menentukan server Anda:
Kemudian Anda dapat menjalankan beberapa perintah dan file skrip di atasnya, baik secara berurutan atau paralel, seperti:
sumber
Proyek Hypertable baru-baru ini menambahkan alat ssh multi-host. Alat ini dibangun dengan libssh dan membuat koneksi dan mengeluarkan perintah secara serempak dan paralel untuk paralelisme maksimum. Lihat Alat SSH Multi-Host untuk dokumentasi lengkap. Untuk menjalankan perintah pada set host, Anda akan menjalankannya sebagai berikut:
Anda juga dapat menentukan nama host atau pola IP, misalnya:
Ini juga mendukung
--random-start-delay <millis>
opsi yang akan menunda dimulainya perintah pada setiap host dengan interval waktu acak antara 0 dan<millis>
milidetik. Opsi ini dapat digunakan untuk menghindari masalah kawanan petir ketika perintah yang dijalankan mengakses sumber daya pusat.sumber
Saya telah mengembangkan collectnode Sangat sederhana dan efektif untuk menyelesaikan tugas di beberapa server (termasuk windows)
Cara menggunakan CollectNode:
Buat daftar server, untuk bekerja dengan:
Jalankan CollectNode dengan melewati daftar serve:
Optinally, dimungkinkan untuk memfilter hasil, misalnya perintah ini hanya menampilkan server di mana kondisi tercapai.
https://collectnode.com/5-tasks-collectnode-can-help-managing-servers/
sumber
Hanya pertanyaan untuk pertanyaan yang sangat bagus:
Solusi terbaik yang saya temukan adalah, tidak terlalu mengejutkan, tmux.
Anda dapat melakukan Ctrl-B: setw sinkronisasi-pane di tmux untuk resut yang luar biasa. Anda harus membuka semua koneksi ssh Anda, dalam panel 1 jendela Tmux yang berbeda untuk ini.
sumber
Mungkin sesuatu seperti ini berfungsi, untuk menjalankan perintah pada beberapa host? misalkan semua host diatur dalam .ssh / config untuk login tanpa kata sandi.
$ < hosts.txt xargs -I {} ssh {} command
sumber
Buat file / etc / sxx / hosts
mengisi seperti ini:
Bagikan kunci ssh di semua mesin.
Instal sxx dari paket:
https://github.com/ericcurtin/sxx/releases
Kemudian jalankan perintah seperti ini:
sumber
Gunakan Paramiko http://www.paramiko.org/ dan paralelisme berbasis Thread https://docs.python.org/3/library/threading.html. Kode di bawah ini memungkinkan untuk mengeksekusi beberapa perintah pada setiap server secara paralel!
Catatan: ulangi instruksi di atas untuk setiap server.
sumber
Saya pikir "berharap" adalah apa yang Anda butuhkan.
Banyak orang bahkan tidak tahu itu ada. Ini adalah program berbasis tcl yang akan membuat pertanyaan dan kemungkinan jawaban atas nama Anda. Lihat https://wiki.tcl-lang.org/page/Expect
sumber