Linux setara dengan remoting "satu-ke-banyak" PowerShell

38

Berasal dari administrasi Windows, saya ingin menggali lebih dalam di Linux (Debian). Salah satu pertanyaan saya yang membara, saya tidak bisa menjawab pencarian di web (tidak menemukannya) adalah: bagaimana saya bisa mencapai apa yang disebut remoting "satu-ke-banyak" seperti di PowerShell for Windows?

Untuk memecahnya ke dasar saya akan mengatakan:

Pandangan saya tentang Linux:

  • Saya dapat ssh ke server dan ketik perintah saya
  • Saya mendapatkan hasilnya. Untuk lingkungan 10 server saya harus menulis skrip (perl / python?) Mengirimkan perintah untuk masing-masing?

Pengalaman saya dari Windows:

  1. Saya mengetik perintah saya dan dengan "memanggil-perintah" saya bisa "mengirim" ini ke sekelompok server (mungkin dari textfile) untuk mengeksekusi secara bersamaan dan mendapatkan hasilnya kembali (sebagai objek untuk pekerjaan lebih lanjut).

  2. Saya bahkan dapat membuat beberapa sesi, koneksi diadakan di latar belakang, dan secara selektif mengirim perintah ke sesi ini, dan masuk dan keluar jarak jauh seperti yang saya butuhkan.

(Saya mendengar tentang koki, boneka, dll. Apakah ini sesuatu seperti itu?)


Update 2019:
Setelah mencoba banyak - saya sarankan Rex (lihat komentar ini di bawah ) - setup mudah (efektif itu hanya membutuhkan ssh, tidak ada yang lain) dan gunakan (jika Anda tahu sedikit perl itu bahkan lebih baik, tapi itu opsional)
Dengan Rex (ify ) Anda dapat melakukan perintah adhoc dan memajukannya ke manajemen konfigurasi nyata (... artinya: ini adalah CM di tempat pertama, tetapi juga bagus untuk tugas-tugas adhoc) Situs web jahitannya sudah ketinggalan zaman, tetapi saat ini (per 01/2019) itu dalam pengembangan aktif dan IRC-Channel juga aktif.

Dengan Windows openssh baru ada lebih banyak kemungkinan

Anda dapat mencoba: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

eli
sumber
parallel ssh dapat melakukannya: serverfault.com/questions/2533/…
rogerdpack
MobaXTerm mendukung "multi-eksekusi" di banyak sesi ssh: mobaxterm.mobatek.net/features.html (gulir ke bawah). Juga jika lingkungan workstation utama Anda adalah Windows, itu juga merupakan alat yang cukup manis untuk menghubungkan ke kotak Linux dan banyak lagi.
Kev
dengan tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Jawaban:

50

Ringkasan

  • Ansible adalah alat DevOps yang merupakan pengganti kuat untuk PowerShell
  • RunDeck sebagai antarmuka grafis berguna
  • Beberapa orang menjalankan RunDeck + Ansible bersama-sama

clusterssh

Untuk mengirim perintah jarak jauh ke beberapa server, untuk pemula, saya akan merekomendasikan clusterssh

Untuk menginstal clustersshdi Debian:

apt-get install clusterssh

Tutorial clusterssh lainnya :

ClusterSSH adalah pembungkus Tk / Perl di sekitar alat Linux standar seperti XTerm dan SSH. Dengan demikian, itu akan berjalan pada sembarang OS yang memenuhi syarat POSIX di mana perpustakaan ada - Saya sudah menjalankannya di Linux, Solaris, dan Mac OS X. Ini membutuhkan Tk perpustakaan Perl (perl-tk pada Debian atau Ubuntu) dan X11 :: Protocol (libx11-protocol-perl di Debian atau Ubuntu), selain xterm dan OpenSSH.

Mungkin

Adapun kerangka kerja jarak jauh untuk administrasi beberapa sistem, Ansible adalah alternatif yang sangat menarik untuk Wayang. Itu lebih ramping, dan tidak perlu agen jarak jauh yang berdedikasi karena bekerja lebih dari SSH (itu juga telah dibeli oleh RedHat)

Playbook lebih rumit daripada opsi baris perintah.

Namun, untuk mulai menggunakan Ansible Anda memerlukan instalasi sederhana dan untuk mengatur file teks daftar klien.

Setelah itu, untuk menjalankan perintah di semua server, sesederhana melakukan:

ansible all -m command -a "uptime"

Outputnya juga diformat dengan sangat baik dan dipisahkan per aturan / server, dan saat menjalankannya di latar belakang dapat diarahkan ke file dan berkonsultasi nanti.

Anda bisa mulai dengan aturan sederhana, dan Penggunaan yang mungkin akan semakin menarik saat Anda tumbuh di Linux, dan infrastruktur Anda menjadi lebih besar. Karena itu ia akan melakukan lebih dari PowerShell.

Sebagai contoh, Playbook yang sangat sederhana untuk meningkatkan server Linux yang saya tulis:

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

Ini juga memiliki banyak modul yang didefinisikan yang memungkinkan Anda dengan mudah menulis kebijakan yang komprehensif.

Modul Indeks - Dokumentasi yang Mungkin

Ia juga telah mendapatkan jaringan pusat / sosial "repositori resmi yang menarik untuk mencari kebijakan yang sudah dimungkinkan oleh komunitas. Galaksi yang memungkinkan

Ansible juga banyak digunakan, dan Anda akan menemukan banyak proyek di github, seperti ini dari saya sendiri untuk pengaturan FreeRadius .

Sementara Ansible adalah kerangka kerja open source gratis, tetapi juga memiliki antarmuka panel web berbayar, Ansible Tower meskipun lisensi agak mahal.

Saat ini, setelah RedHat membelinya, tower juga memiliki versi open source yang dikenal sebagai AWX .

Sebagai bonus, Ansible juga mampu mengelola server Windows, meskipun saya belum pernah menggunakannya untuk itu.

Ia juga mampu mengatur peralatan jaringan (router, switch, dan firewall), yang menjadikannya solusi yang sangat menarik sebagai solusi kunci otomatis otomatisasi.

Cara menginstal Ansible

Rundeck

Sekali lagi, untuk kerangka kerja jarak jauh lebih mudah digunakan, tetapi tidak begitu kuat sebagai Ansible, saya merekomendasikan Rundeck .

Ini adalah antarmuka grafis multi-pengguna / login yang sangat kuat di mana Anda dapat mengotomatiskan banyak tugas sehari-hari Anda yang umum, dan bahkan memberikan pandangan yang dipermudah kepada pengurus atau orang-orang helpdesk.

Saat menjalankan perintah, itu juga memberi Anda windows dengan output dipecah oleh server / tugas.

Itu dapat menjalankan banyak pekerjaan di latar belakang dengan mulus, dan memungkinkan Anda untuk melihat laporan dan hasilnya nanti.

hapus gambar

Cara menginstal RunDeck

Harap perhatikan ada orang yang menjalankan Ansible + RunDeck sebagai antarmuka web; tidak semua kasus sesuai untuk itu.

Tak perlu dikatakan lagi bahwa menggunakan Ansible dan / atau RunDeck dapat ditafsirkan sebagai bentuk atau bagian dari dokumentasi infrastruktur, dan seiring waktu memungkinkan untuk mereplikasi dan meningkatkan tindakan / resep / Playbook.

Terakhir, berbicara tentang server perintah pusat, saya akan membuat satu hanya untuk tugas itu. Sebenarnya istilah teknisnya adalah kotak lompat. 'Lompat kotak' meningkatkan keamanan, jika Anda mengaturnya dengan benar .

Rui F Ribeiro
sumber
1
Ansible adalah solusi hebat vs beberapa skrip atau utilitas yang hanya menyiarkan perintah ke beberapa server SSH. Ansible melakukan itu (dan lebih cocok untuk tujuan itu daripada Wayang atau Koki), tetapi juga memberi Anda opsi untuk mencapai tujuan Anda dengan cara yang lebih baik misalnya menggunakan modul bawaan untuk menginstal sesuatu dengan idempoten alih-alih hanya mengirimkan perintah instal dan berharap yang terbaik.
JBentley
12

Anda juga dapat menggunakan pssh(atau parallel-ssh), yang merupakan klien SSH yang terhubung ke daftar host dan mengeksekusi perintah pada semua host secara paralel:

$ 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
morxa
sumber
11

Mungkin Anda dapat mencapai tujuan Anda dengan fungsi zsh (bash) sederhana. Katakanlah Anda memiliki server l61 l62 l63 dan Anda sering harus menjalankan perintah pada mereka:

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

Jadi, di baris perintah:

$ 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
Sergei Kurenkov
sumber
5
Saya akan merekomendasikan mencetak nama server sebelum hasilnya. Menjalankan skrip secara paralel juga membawa keanehan lain, seperti meraba-raba output skrip - langkah-langkah tambahan harus diambil untuk menjaga aktivitas output. Menjalankan setiap tugas di latar depan juga menawarkan kemungkinan interaksi input minimal.
Rui F Ribeiro
3

Jika Anda menggunakan KDE, inilah metode lain.
- Buka jendela Konsole.
Untuk setiap server yang ingin Anda komunikasikan:
- buka tab
- buat koneksi ssh dengan server
Di menu "Edit", pilih "salin input" ke "semua tab"

Setiap perintah yang Anda masukkan di tab itu akan disalin ke semua server.
Anda dapat beralih dari tab ke tab untuk melihat hasil yang berbeda.

Catatan: label menu saya (dalam tanda kutip) mungkin salah karena saya tidak menggunakan KDE versi bahasa Inggris

pengguna161210
sumber
1

GNU paralel

Ini memungkinkan satu-liner sederhana dengan pengaturan tersimpan, sehingga Anda dapat membuat profil, "prod ', yang akan berisi daftar server dan switch umum. Kemudian tambahkan saja perintah yang Anda inginkan, dan Anda siap. Ini juga dapat menyalin file ke server dan secara otomatis menghapusnya pada akhirnya, dan itu cukup nyaman untuk skrip yang lebih besar. Juga sangat cepat.

Satu-satunya masalah adalah bahwa ia memiliki begitu banyak pilihan;) Tetapi dokumentasinya juga mencakup banyak contoh, jadi Anda bisa melihatnya pada awalnya.

alkuzad
sumber
2
Hai, Selamat datang di Linux dan Linux. Seseorang sudah memberi skrip menggunakan gnu-parallel punya contoh. Saya menyarankan Anda untuk melihat-lihat, jawaban yang lebih rumit dihargai, dan akan memberi Anda lebih banyak poin.
Rui F Ribeiro
1
@RuiFRibeiro maaf saya tidak melihat, SO aplikasi android bug dengan kotak kode dan saya tidak bisa melihat sebagian besar konten (itu menghasilkan ruang kosong putih). Anda menyebutkan gnu-paralel adalah meraba-raba output - dapat menulisnya secara berurutan tetapi Anda harus mengatakannya untuk melakukannya :)
alkuzad
Ya, saya tidak terbiasa dengan itu, tetapi sudah curiga, maka menyebutkan jawaban perlu perbaikan. Terima kasih. Tidak ada yang mencegah Anda menulis jawaban yang lebih baik di sekitarnya, namun untuk berkomentar, saya sarankan mengomentari jawaban itu.
Rui F Ribeiro
1

Saya ingin menyebutkan "Rex" di sini juga: https://www.rexify.org/

Ini adalah alat yang luar biasa yang menggunakan perl + ssh (otentikasi pengguna / kata sandi atau kunci) dan karena perl diinstal pada setiap sistem linux (?!), Saya pikir itu tampaknya lebih alami untuk digunakan (memiliki beberapa kesamaan dengan Ansible & Co.)

Anda dapat menjalankan perintah adhoc pada beberapa server sekaligus (server1, server2, server ... - setelah mengatur otentikasi, atau sebagai alternatif gunakan parameter -p / -u dan -s / -S untuk eksekusi sudo dari perintah):

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

atau buat file tempat Anda menentukan "tugas" yang berbeda dan panggil dari sana

$ rex -f myConfigFile.rex uptime

Itu dapat diinstal melalui repositori atau bahkan dengan perls cpan (atau cpanm Rex) dan pengaturan awalnya mudah, lihat:
- https://www.rexify.org/ atau
- https://www.rexify.org/docs/guides/ start_using__r__ex.html dan
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

eli
sumber