Saya mencari cara untuk mendorong konfigurasi dari satu mesin pusat ke beberapa mesin jarak jauh tanpa perlu menginstal apa pun di mesin jarak jauh.
Tujuannya adalah untuk melakukan sesuatu seperti yang Anda akan temukan dengan alat-alat seperti cfengine
, tetapi pada satu set mesin yang tidak memiliki agen mengatur. Ini mungkin sebenarnya teknik yang baik untuk mengatur cfagent
pada set mesin jarak jauh yang ada.
ssh
configuration
bash
scripting
tremoloqui
sumber
sumber
Jawaban:
Anda bisa melewatkan skrip dan menjalankannya secara sementara dengan memiparkannya dan mengeksekusi sebuah shell.
misalnya
Secara alami,
"ls -l; echo 'Hello World'"
bagian itu bisa diganti dengan skrip bash yang disimpan dalam file di mesin lokal.misalnya
Tepuk tangan!
sumber
Ada beberapa cara untuk melakukannya.
1:
2:
3:
nomor 3 adalah cara yang saya sukai, ini memungkinkan perintah interaktif misalnya
su -S service nginx restart
(# 1 akan menggunakan sisa skrip sebagai input untuk pertanyaan kata sandi saat Anda menggunakan
su -S
.)sumber
Saya akan merekomendasikan Fabric python untuk tujuan ini:
Anda harus dapat menggunakan hal di atas untuk memulai. Konsultasikan dokumentasi Fabric yang sangat baik untuk melakukan sisanya. Sebagai tambahan, sangat mungkin untuk menulis skrip Anda sepenuhnya di dalam Fabric - tidak perlu menyalin, namun perlu dicatat bahwa untuk mengubah skrip di semua mesin, Anda hanya perlu mengedit salinan lokal dan memindahkannya. Selain itu, dengan sedikit lebih dari penggunaan dasar API, Anda dapat memodifikasi skrip berdasarkan host mana yang sedang berjalan dan / atau variabel lain. Ini semacam harapan pythonic.
sumber
run
dansudo
), bahkan tidak diperlukan.Inilah tepatnya yang digunakan untuk Ansible. Tidak ada agen, Anda hanya perlu membuat file teks bernama:
dengan konten yang terlihat seperti:
Ini akan menentukan bahwa mesin "web1, web2 ... web8" berada dalam grup "webhosts". Maka Anda dapat melakukan hal-hal seperti:
untuk me-restart layanan apache2 di semua mesin Anda, menggunakan sudo.
Anda dapat melakukannya dengan perintah cepat seperti:
atau Anda dapat menjalankan skrip lokal pada mesin jarak jauh:
atau Anda dapat membuat buku pedoman (lihat dokumentasi untuk detailnya) dengan konfigurasi lengkap yang Anda inginkan agar sesuai dengan server Anda dan gunakan dengan:
Pada dasarnya Anda dapat mulai menggunakannya sebagai alat baris perintah untuk menjalankan perintah di beberapa server dan memperluas penggunaannya menjadi alat konfigurasi yang lengkap sesuai keinginan Anda.
sumber
ansible webhosts -m script script.sh
Seperti yang dijelaskan dalam jawaban ini, Anda dapat menggunakan heredoc :
Anda harus berhati-hati dengan heredoc, karena hanya mengirim teks, tetapi tidak benar-benar menunggu respons. Itu berarti tidak akan menunggu perintah Anda dieksekusi.
sumber
Jawabannya di sini ( https://stackoverflow.com/a/2732991/4752883 ) berfungsi dengan baik jika Anda mencoba menjalankan skrip pada mesin linux jarak jauh menggunakan
plink
ataussh
. Ini akan berfungsi jika skrip memiliki beberapa baris aktiflinux
.** Namun, jika Anda mencoba menjalankan skrip batch yang terletak di
linux/windows
mesin lokal dan mesin jarak jauh AndaWindows
, dan itu terdiri dari beberapa baris menggunakan **plink root@MachineB -m local_script.bat
itu tidak akan berhasil.
Hanya baris pertama skrip yang akan dieksekusi. Ini mungkin batasan
plink
.Solusi 1:
Untuk menjalankan skrip kumpulan multiline (terutama jika relatif sederhana, terdiri dari beberapa baris):
Jika skrip batch asli Anda adalah sebagai berikut
Anda dapat menggabungkan garis-garis tersebut menggunakan pemisah "&&" sebagai berikut dalam
local_script.bat
file Anda sebagai berikut https://stackoverflow.com/a/8055390/4752883 :Setelah perubahan ini, Anda kemudian dapat menjalankan skrip seperti yang ditunjukkan di sini oleh @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883
Solusi 2:
Jika skrip batch Anda relatif rumit, mungkin lebih baik menggunakan skrip batch yang merangkum perintah plink dan juga seperti yang ditunjukkan di sini oleh @Martin https://stackoverflow.com/a/32196999/4752883 :
sumber
Mengapa tidak menyalin saja skrip terlebih dahulu, lalu menjalankannya?
Tentu saja Anda harus berhati-hati untuk tidak mengunggahnya ke tempat yang dapat ditulis oleh dunia, sehingga tidak ada orang lain yang bisa bermain dengannya sebelum Anda menjalankannya (mungkin sebagai root).
sumber
Menulis ulang script dengan cara yang setiap perintah di dalamnya sudah yang diawali dengan ssh dan hostname / ip atau daftar tersebut akan diteruskan ke script sebagai argumen (dengan asumsi Anda memiliki passwordless / ssh-agent otentikasi kunci mengatur). Beberapa pekerjaan mungkin diperlukan untuk dengan benar melewati kode kesalahan / kembali dari perintah jarak jauh ....
sumber
Jika skrip tidak terlalu besar, dan Anda menggunakan bash atau ksh ...
Baik stdin dan stdout bekerja dengan benar tetapi skrip terbatas pada ukuran argumen (biasanya sekitar 100rb). Argumen untuk skrip dapat berfungsi, di akhir baris, mungkin mengikuti argumen "-" tambahan. "-T" untuk mengalokasikan pty adalah opsional.
Hati-hati: Ini membingungkan penyelesaian-bash, jangan tekan tab.
sumber