Saya punya dua pertanyaan:
- Ada beberapa mesin linux jarak jauh, dan saya perlu menulis skrip shell yang akan menjalankan serangkaian perintah yang sama di setiap mesin. (Termasuk beberapa operasi sudo). Bagaimana ini bisa dilakukan dengan menggunakan skrip shell?
- Saat ssh'ing ke mesin jarak jauh, bagaimana menanganinya ketika meminta otentikasi sidik jari RSA.
Mesin jarak jauh adalah VM yang dibuat saat dijalankan dan saya hanya memiliki IP-nya. Jadi, saya tidak dapat menempatkan file skrip sebelumnya di mesin tersebut dan menjalankannya dari mesin saya.
expect
sebagai ` ekspektasi " ? assword: "`Jawaban:
Anda dapat melakukan ini dengan ssh, misalnya:
Anda dapat menambahkan
StrictHostKeyChecking=no
opsi ke ssh:Ini akan menonaktifkan pemeriksaan kunci host dan secara otomatis menambahkan kunci host ke daftar host yang dikenal. Jika Anda tidak ingin host ditambahkan ke file host yang dikenal, tambahkan opsi
-o UserKnownHostsFile=/dev/null
.Perhatikan bahwa ini menonaktifkan pemeriksaan keamanan tertentu , misalnya perlindungan terhadap serangan man-in-the-middle. Oleh karena itu, sebaiknya tidak diterapkan di lingkungan yang sensitif terhadap keamanan.
sumber
ssh
dari skrip shell apa punAda beberapa cara untuk mengatasinya.
Cara favorit saya adalah menginstal http://pamsshagentauth.sourceforge.net/ pada sistem jarak jauh dan juga kunci publik Anda sendiri. (Cari tahu cara untuk menginstal ini di VM, entah bagaimana Anda memasang seluruh sistem Unix, apa lagi beberapa file?)
Dengan agen ssh Anda diteruskan, Anda sekarang dapat masuk ke setiap sistem tanpa kata sandi.
Dan lebih baik lagi, modul pam itu akan mengautentikasi sudo dengan pasangan kunci ssh Anda sehingga Anda dapat menjalankan dengan hak root (atau pengguna lain) sesuai kebutuhan.
Anda tidak perlu khawatir tentang interaksi kunci host. Jika inputnya bukan terminal maka ssh hanya akan membatasi kemampuan Anda untuk meneruskan agen dan mengautentikasi dengan kata sandi.
Anda juga harus melihat paket seperti Capistrano. Pasti melihat-lihat situs itu; itu memiliki pengantar untuk skrip jarak jauh.
Baris skrip individu mungkin terlihat seperti ini:
sumber
Instal sshpass menggunakan,
apt-get install sshpass
kemudian edit skrip dan masukkan IP mesin linux Anda, nama pengguna dan kata sandi dalam urutan masing-masing. Setelah itu jalankan skrip itu. Itu dia ! Skrip ini akan menginstal VLC di semua sistem.sumber
Jika Anda dapat menulis kode Perl, maka Anda harus mempertimbangkan untuk menggunakan Net :: OpenSSH :: Parallel .
Anda akan dapat menjelaskan tindakan yang harus dijalankan di setiap host secara deklaratif dan modul akan menangani semua detail yang menakutkan. Menjalankan perintah melalui
sudo
juga didukung.sumber
Ini bekerja untuk saya.
Sintaks: ssh -i pemfile.pem nama_pengguna @ ip_address 'command_1; perintah 2; perintah 3 '
sumber
Untuk jenis tugas ini, saya berulang kali menggunakan Ansible yang memungkinkan untuk menduplikasi skrip bash secara koheren di beberapa penampung atau VM. Ansible (lebih tepatnya Red Hat ) sekarang memiliki antarmuka web tambahan AWX yang merupakan edisi open-source dari Menara komersial mereka.
Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible Tower: produk komersial, Anda mungkin akan menjelajahi AWX open-source gratis, daripada free-trail 15 hari Menara
sumber
Ada banyak cara untuk menjalankan perintah atau skrip di beberapa mesin Linux jarak jauh. Salah satu cara sederhana & termudah adalah melalui pssh (program ssh paralel)
pssh : adalah program untuk mengeksekusi ssh secara paralel pada sejumlah host. Ini menyediakan fitur seperti mengirim input ke semua proses, melewatkan kata sandi ke ssh, menyimpan output ke file, dan waktu habis.
Contoh & Penggunaan:
Hubungkan ke host1 dan host2, dan cetak "hello, world" dari masing-masing:
Jalankan perintah melalui skrip di beberapa server:
Gunakan & jalankan perintah tanpa memeriksa atau menyimpan kunci host:
Jika file hosts.txt memiliki banyak entri, katakanlah 100, maka opsi paralelisme juga dapat disetel ke 100 untuk memastikan bahwa perintah dijalankan secara bersamaan:
Opsi :
-I: Membaca masukan dan mengirim ke setiap proses ssh.
-P: Memberi tahu pssh untuk menampilkan keluaran saat ia diterima.
-h: Membaca file host.
-H: [pengguna @] host [: port] untuk host tunggal.
-i: Menampilkan keluaran standar dan kesalahan standar saat setiap host menyelesaikan
-x args: Meneruskan argumen baris perintah SSH tambahan
-o opsi: Dapat digunakan untuk memberikan opsi dalam format yang digunakan dalam file konfigurasi. (/ etc / ssh / ssh_config ) (~ / .ssh / config)
-p paralelisme: Gunakan nomor yang diberikan sebagai jumlah maksimum dari koneksi bersamaan
-q Mode diam: Menyebabkan sebagian besar pesan peringatan dan diagnostik disembunyikan.
-t: Buat waktu koneksi habis setelah jumlah detik yang ditentukan. 0 berarti pssh tidak akan melakukan timeout koneksi apapun
Nonaktifkan StrictHostKeyChecking untuk menangani permintaan otentikasi RSA.
-o StrictHostKeyChecking = tidak
Sumber : man pssh
sumber
Ini berhasil untuk saya. Saya membuat fungsi. Taruh ini di skrip shell Anda:
Jika Anda memiliki beberapa mesin yang ingin Anda lakukan perintah yang sama, ulangi baris tersebut dengan titik koma. Misalnya, jika Anda memiliki dua mesin, Anda akan melakukan ini:
Gantikan USER dengan pengguna komputer tersebut. Gantikan HOST dengan nama komputer. Ganti COMMAND dengan perintah yang ingin Anda lakukan di komputer.
Semoga ini membantu!
sumber
Anda dapat mengikuti pendekatan ini:
sumber