Jalankan skrip shell dengan tombol html

11

Saya ingin meluncurkan skrip bash ketika tombol ditekan di situs web. Ini adalah upaya pertama saya:

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

Tapi tidak berhasil. Ada saran?

EDIT- Mengikuti saran slhclk dan mit:

Saya memiliki file php di / var / www yang saya arahkan ke browser-web saya. Isi file adalah sebagai berikut:

<?php
exec("/home/aa/scripts/test.sh");
?>

tesh.sh berisi ini:

screen -S server1 -X quit

Jika saya mengetikkan /home/aa/scripts/test.shshell, skrip dapat dijalankan. Namun, ketika saya mengarahkan browser web saya ke http://example.com/screen.php (yang memiliki kode di atas), saya melihat halaman kosong dan skrip belum dieksekusi. Keduanya memiliki izin eksekusi. Mengapa itu tidak berhasil?

dukevin
sumber
Akan menarik untuk mengetahui apa jenis server web ini. Misalnya itu bisa berupa server linux rumah, mesin windows dengan XAMPP atau tawaran hosting massal situs web standar dengan nama domain dari hoster besar?
mit
Saya menggunakan debian lenny yang menjalankan vps yang saya sewa
dukevin
1
Ini benar-benar Dup ini, bahkan ditanyakan oleh pengguna yang sama ">> stackoverflow.com/questions/6235785/… , di mana saya memposting jawaban kerja saya. Merasa mereka harus ditautkan.
FreeSoftwareServers

Jawaban:

11

Apa yang Anda coba lakukan tidak mungkin seperti itu.

Perhatikan bahwa selalu ada dua sisi untuk itu: Sisi klien dan sisi server. Apakah skrip di komputer klien atau di server?


Jika ada di klien: Anda sebagai pengunjung hanya melihat situs web HTML. onClickhanya akan dapat meluncurkan JavaScript (atau bahasa skrip lain ), tetapi tidak ada skrip shell sembarang yang berada di komputer Anda. Script HTML hanya berjalan di browser dan hanya dapat melakukan hal-hal terbatas. Yang paling penting, mereka tidak dapat berinteraksi dengan komputer Anda.

Pikirkan tentang hal ini: Bagaimana browser tahu cara membuka file? Tidakkah Anda pikir ini akan menjadi masalah keamanan juga - sebuah situs web sederhana yang memicu eksekusi skrip pada komputer klien? Bagaimana jika ada sesuatu seperti itu onClick('rm -rf /home/user')?

Alternatifnya adalah menjalankan applet Java, jika Anda ingin kode dieksekusi pada klien, tetapi ini tidak persis sama dan itu adalah sesuatu yang sangat rumit. Saya pikir tidak perlu menjelaskan ini secara rinci.


Jika skrip ada di server: Jika Anda ingin menjalankan skrip di sisi server dan meminta pengguna memicu pelaksanaannya, maka Anda perlu menggunakan bahasa pemrograman sisi server. Hanya HTML tidak akan melakukannya, karena ini lebih atau kurang file statis. Jika Anda ingin berinteraksi dengan server, Anda bisa menggunakan PHP misalnya .

Ini memiliki execfungsi untuk menjalankan skrip baris perintah yang disimpan di server web. Jadi pada dasarnya, Anda bisa menulis exec('/path/to/name.sh');dan menjalankan skrip di server.

Namun, memasukkan saja ini onClicktidak cukup di sini. Jika Anda belum tahu tentang PHP dan pemrograman web sisi server, Anda mungkin ingin membaca beberapa tutorial terlebih dahulu dan kemudian kembali dengan pertanyaan yang lebih spesifik.


Jika Anda memiliki file php dengan exec(...)perintah yang sesuai , pastikan skrip telah mengeksekusi izin yang ditetapkan tidak hanya untuk pengguna tetapi juga untuk grup server web, jadi dalam kasus yang paling sederhana saja 777.

Jika terjadi masalah, periksa kembali nilai skrip dengan echo exec(...);untuk melihat apakah ada kesalahan.

Anda juga dapat menjalankan skrip dari baris perintah dan bukan dari browser dengan php /path/to/file.php.

slhck
sumber
Terima kasih banyak atas jawabannya. Script shell berada di komputer saya. Saya mencoba apa yang Anda tulis, namun, saya mengalami masalah. Saya telah mengedit pertanyaan saya di atas
dukevin
Oke, ini masalah yang berbeda. Apakah Anda benar-benar menginstal PHP? Cobalah untuk mendapatkan kode pengembalian execbaris dengan menulis echo exec(...);. Perhatikan juga bahwa skrip perlu menjalankan izin untuk grup yang dijalankan oleh server web Anda, bukan hanya pengguna Anda.
slhck
ya saya punya chmod 777 di kedua file. Dan saya mencoba menjalankan php langsung dari shell dengan hasil yang aneh. pastebin.com/eU0xTkp2 Namun, saya punya php diinstal, dikonfirmasi dengan php -vdan fakta bahwa saya memiliki phpfilemanager bagi orang untuk mengedit file. Kenapa tidak menggunakan penerjemah php?
dukevin
Anda harus menjalankannya dengan php /var/www/trash/run.phpdan bukan hanya nama file PHP itu sendiri.
slhck
1
Bukan apa-apa! Saya tidak terlalu yakin pada spesifikasinya, tetapi seharusnya karena ketika Anda menjalankannya dari baris perintah, Anda menjalankannya sebagai pengguna yang benar, sedangkan ketika dijalankan dari browser, pengguna hilang. Anda perlu memeriksa itu dalam skrip shell Anda, saya kira.
slhck
4

Anda memerlukan intelijen sisi server untuk ini. HTML saja tidak cukup, karena statis. Salah satu cara yang umum adalah php. Banyak penawaran yang diinangi memang memasang php secara default.

Anda dapat menggunakan program ftp untuk meletakkan file teks ke direktori root server Anda.

Filefile bisa dinamai "run.php" dengan konten berikut:

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

Katakanlah domain Anda adalah "example.com", jika Anda mengunjungi halaman ini di browser Anda:

http://example.com/run.php

maka file php akan dieksekusi di server. Ini akan mengirim halaman HTML ke browser dengan tajuk. Dan skrip akan dieksekusi di server.

Ada beberapa hal yang perlu diingat dan beberapa kemungkinan peningkatan:

1) semua orang akan bisa mengenai halaman ini, juga robot. Anda bisa mengamankan halaman dengan htacces.

2) Halaman ini akan diaktifkan jika ada permintaan "GET" normal dari browser. Tapi itu melibatkan tindakan di server, dan jika tindakan ini mengubah data atau melakukan sesuatu yang penting, akan lebih baik untuk hanya memecat skrip pada permintaan POST.

3) Anda dapat memasukkan pernyataan form / tombol untuk dapat memuat ulang / mengeksekusi kembali halaman. Pastikan untuk menggunakan metode yang tepat (GET atau POST) dalam atribut metode pernyataan formulir HTML.

4) Akan lebih baik untuk mendapatkan hasil dari skrip shell (kode rturn dan mungkin keluaran teks) dan menulisnya ke browser. Ini memiliki masalah yang cukup untuk qustion terpisah:)

mit
sumber
3

Ini bisa menjadi masalah izin.

Saat Anda memicunya menggunakan webapp , itu adalah apache yang menjalankan skrip. Jika apache tidak memiliki izin untuk menjalankan skrip itu tidak akan berfungsi.

Solusi: periksa izin dan coba lagi .. :)

pengguna635568
sumber
1

Saya tahu ini sangat terlambat tetapi saya pikir perlu dicatat bahwa mengkonfigurasi CGI di server akan memungkinkan Anda untuk menjalankan skrip bash sisi-server tanpa menggunakan PHP atau semacamnya.

Saya tahu ini tidak membahas pertanyaan yang diperbarui, tetapi saya menemukan ini ketika mencoba mencari tahu sendiri jadi saya pikir saya akan mempostingnya!

Torreh
sumber
0

Untuk menjalankan skrip shell langsung dari browser, Anda harus menambahkan aturan ini ke file .htaccess Anda:

Options +ExecCGI
AddHandler cgi-script .sh

Ini memberitahu server web untuk memperlakukan file .sh sebagai skrip CGI. Jangan lupa untuk mengubah izin file .sh ke 755.

Agnel Vishal
sumber