Saya mengotomatiskan proses penyebaran dan saya ingin dapat hanya memanggil satu file .sh di mesin saya, minta saya membuat dan mengunggah .zip ke server dan kemudian melakukan banyak hal di server. Salah satu hal yang perlu saya lakukan mengharuskan saya menjadi root. Jadi, yang ingin saya lakukan adalah ini:
ssh user@172.1.1.101 <<END_SCRIPT
su -
#password... somehow...
#stop jboss
service server_instance stop
#a bunch of stuff here
#all done!
exit
END_SCRIPT
Apakah ini mungkin?
Jawaban:
Sudahkah Anda mempertimbangkan sudo tanpa kata sandi?
sumber
Alih-alih su, gunakan sudo dengan NOPASSWD yang diatur dalam sudoers untuk perintah yang sesuai. Anda akan ingin membuat perintah yang diizinkan dibuat sebatas mungkin. Setelah itu panggil jalankan skrip untuk perintah root mungkin merupakan cara terbersih dan sejauh ini termudah untuk mengamankan jika Anda tidak terbiasa dengan sintaks file sudoer. Untuk perintah / skrip yang membutuhkan lingkungan penuh untuk dimuat,
sudo su - -c command
berfungsi meskipun mungkin berlebihan.sumber
Apa yang Anda gambarkan mungkin dengan harapan .
sumber
Anda bisa meneruskan perintah sebagai argumen ke SSH untuk menjalankan perintah itu di server, dan kemudian keluar:
Ini juga berfungsi untuk daftar beberapa perintah:
Atau sebagai alternatif:
Seperti yang ditunjukkan oleh pengguna lain sebelum saya, menjalankan
su
server akan meluncurkan shell baru alih-alih mengeksekusi perintah berikutnya dalam skrip sebagai root. Yang perlu Anda lakukan adalah menggunakan salah satusudo
atausu -c
, dan memaksa alokasi TTY ke SSH dengan-t
saklar (diperlukan jika Anda perlu memasukkan kata sandi root):Singkatnya, satu cara untuk mencapai apa yang ingin Anda lakukan, adalah:
Karena
sudo
biasanya mengingat tingkat otorisasi Anda selama beberapa menit sebelum meminta kata sandi root lagi, hanya dengan menambahkansudo
semua perintah yang perlu Anda jalankan sebagai root kemungkinan cara termudah untuk menjalankan perintah sebagai root di server. MenambahkanNOPASSWD
aturan untuk pengguna Anda/etc/sudoers
akan membuat proses lebih lancar.Saya harap ini membantu :-)
sumber
NOPASSWD
aturan itu, periksa contoh di bagian bawahman sudoers
. Juga, ingatlah untuk menggunakanvisudo
saat mengeditsudoers
file Anda untuk menghindari kerusakan!su -c
alih-alihsudo
, Anda harus menjalankan SSH dengan-t
benderanya - Anda akan diminta untuk memasukkan kata sandi root di server ketika perintah dijalankan. Memberikan kata sandi secara langsungsu
sebagai argumen baris perintah tidak didukung (sejauh yang saya tahu), atau disarankan - karena sederhanaps -ef | grep su
mengungkapkan semua argumen yang diteruskansu
, termasuk kata sandi yang diberikan dari baris perintah ...su -c
SSH:ssh -t user@host 'su -lc "
<br />echo this is a test
<br />echo this is another test
<br />"
<br />'
<br />
atas dengan baris baru di skrip Anda. Di luar topik: Bisakah Anda menambahkan baris baru ke komentar ServerFault? Itu akan sangat berguna ketika memposting potongan kode ...Tidak. Bahkan jika Anda mendapatkan kata sandi
su
, Anda masih harus berurusan dengan fakta yangsu
akan membuka shell baru, yang berarti bahwa perintah Anda selanjutnya tidak akan diteruskan ke sana. Anda harus menulis skrip untuk operasi root bersama dengan pembantu yang dapat dieksekusi yang dapat menjalankannya dengan hak istimewa yang sesuai.sumber
Tulis skrip harapan. Saya tahu Anda sudah menemukan jawaban untuk ini, tetapi ini mungkin membantu jika Anda harus masuk ke sekelompok server yang memerlukan entri kata sandi interaktif.
Ini adalah bahasa yang didasarkan pada TCL, jadi mungkin agak aneh dibandingkan dengan skrip shell lama. Tetapi ia menangani otomatisasi input teks dan, Anda dapat menebaknya, "mengharapkan" bit-bit output tertentu sebelum memasukkan segala jenis entri kata sandi otomatis atau meningkatkan hak istimewa.
Berikut ini tautan yang bagus sebagai panduan: http://bash.cyberciti.biz/security/expect-ssh-login-script/
Kalau-kalau situs turun:
sumber
Saya tahu ini agak terlambat tetapi saya pribadi akan menggunakan Net :: SSH :: Expect, tersedia dari CPAN.
http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod
sumber
Anda dapat menggunakan 'ssh example.com su -lc "$ cmd"'.
Ketika perintah berisi opsi, Anda perlu mengutipnya, jika tidak, "su" dapat memakannya ("su: opsi tidak valid - 'A').
sumber