Saya bertanya-tanya apakah ada cara untuk menjalankan skrip / perintah dari mesin lokal tanpa membuat modifikasi apa pun sebagai root pada mesin remote?
Beberapa latar belakang
Saya mencoba mengatur beberapa tugas melalui Capistrano dan saya memerlukan sudo
akses. Ada sekitar 30+ server dan bagi saya untuk memperbarui secara manual /etc/sudoers
akan menyakitkan, jadi saya bertanya-tanya apakah ada metode untuk memperbarui file ini dari jarak jauh?
fabric.contrib.files.sed
metode.Jawaban:
Anda dapat menjalankan skrip lokal dari jarak jauh dengan mengeksekusi
bash
di sistem jarak jauh dan mengumpankan skrip Anda$ ssh user@host 'bash -s' < script.sh
Edit
Untuk menjalankan perintah yang mengharuskan penggunaan
sudo
padassh's
-t
opsi penggunaan mesin jarak jauh dan meneruskan perintah kessh
. The-t
pilihan mengalokasikan tty pseudo dan memungkinkan interaksi pengguna dengan perintah berlari olehssh
, seperti memasukkan password untuksudo
Untuk memodifikasi file menggunakan metode
sed
ini disarankan melalui pengalihan>
karena pengalihan shell tidak memungkinkan untuk menulis file saat menggunakansudo
. Selain itu, semua variabel dalamsed
perintah harus diloloskan ketika mereka dilewatkan kessh
.Untuk mengotomatiskan semuanya:
sumber
/etc/sudoers
file karena izin root itu akan gagal.sudo
kata sandi yang dari apa yang saya pahami diatur/etc/sudoers
sudo
hak pada mesin ini, maka untuk memodifikasi/etc/sudoers
Anda harus masuk melalui ssh asroot
. Jadi perintahnya adalahssh root@host -t 'sed -i "\$a text to insert" /path/to/file'
Saya menemukan
tee
perintah untuk membantu menghindari pembatasan sudo pada pengalihan file. Menggunakan sed terbukti membuat frustrasi karena persyaratan karakter yang lolos.Ini adalah perintah yang saya gunakan untuk menambahkan remote host untuk semua mesin di cluster saya ke / etc / hosts:
Output untuk setiap iterasi terlihat seperti ini:
Jawaban SU ini sangat penting dalam membangun solusi akhir saya: https://superuser.com/a/1026359/587485
sumber
Jika Anda perlu menjalankan beberapa perintah atau arahan ulang, Anda harus menggunakan sintaks berikut:
sumber
Anda harus sudah memiliki semacam akses tingkat root, baik melalui root passwd langsung atau pengaturan sudo id pengguna Anda sebelum mencoba untuk memodifikasi file sudoers.
sumber