Html düğmesiyle kabuk komut dosyası çalıştırma


12

Bir web sitesinde bir düğmeye basıldığında bir bash betiği başlatmak istiyorum. Bu benim ilk teşebbüsüm:

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

Ama şans yok. Herhangi bir öneri?

EDIT- slhclk ve mit'in tavsiyelerine göre:

Ben web tarayıcımı işaret / var / www bir php dosyası var. Dosyanın içeriği aşağıdaki gibidir:

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

tesh.sh şunu içerir:

screen -S server1 -X quit

Ben yazarsanız /home/aa/scripts/test.shkabuğunda, komut yürütmek yapabiliyor. Ancak, web tarayıcımı http://example.com/screen.php'ye (yukarıdaki kodu içeren) yönlendirdiğimde boş bir sayfa görüyorum ve komut dosyası yürütülmedi. Her ikisinin de yürütme izinleri vardır. Neden çalışmıyor?


Ne tür bir web sunucusu olduğunu bilmek ilginç olurdu. Örneğin, bir ev linux sunucusu, XAMPP ile bir windows makinesi veya büyük bir barındırıcıdan bir alan adı ile standart bir web sitesi kitle barındırma teklifi olabilir mi?
mit

Ben kira bir vps çalışır debian lenny duyuyorum
dukevin

1
Bu gerçekten bunun bir Dup, hatta aynı kullanıcı tarafından sorulan ">> stackoverflow.com/questions/6235785/… , burada benim çalışma cevabı gönderdi. Bağlantılı olması gerektiğini hissettim.
FreeSoftwareServers

Yanıtlar:


11

Yapmaya çalıştığınız şey bu şekilde mümkün değil.

Bunun her zaman iki tarafı olduğunu unutmayın: İstemci tarafı ve sunucu tarafı. Komut dosyası istemci bilgisayarda mı yoksa sunucuda mı?


İstemcide ise: Ziyaretçi olarak yalnızca bir HTML web sitesi görüyorsunuz. onClickyalnızca JavaScript'i (veya diğer komut dosyası dillerini ) başlatabilir , ancak bilgisayarınızda bulunan rastgele kabuk komut dosyalarını kullanamaz. HTML komut dosyaları yalnızca tarayıcıda çalışır ve yalnızca sınırlı şeyler yapabilir. En önemlisi, bilgisayarınızla etkileşime giremezler.

Bir düşünün: Tarayıcı dosyayı nasıl açacağını nasıl bilebilir? Bunun da bir güvenlik sorunu olacağını düşünmüyorsunuz - istemcinin bilgisayarındaki komut dosyalarının yürütülmesini tetikleyen sade bir web sitesi? Ya böyle bir şey olsaydı onClick('rm -rf /home/user')?

Kod istemcide yürütülmesini istiyorsanız bir Java uygulaması çalıştırmak olabilir, ancak bu tam olarak aynı değildir ve bu gerçekten karmaşık bir şeydir. Bunu ayrıntılı olarak açıklamanın gerekli olduğunu düşünmüyorum.


Komut dosyası sunucudaysa: Sunucu tarafında bir komut dosyası çalıştırmak ve kullanıcının yürütülmesini tetiklemesini istiyorsanız, bir sunucu tarafı programlama dili kullanmanız gerekir. Sadece HTML bunu yapmaz, çünkü aşağı yukarı statik bir dosyadır. Sunucuyla etkileşim kurmak istiyorsanız, örneğin PHP kullanabilirsiniz .

execWeb sunucusunda depolanan bir komut satırı komut dosyasını çalıştırma işlevine sahiptir . Temel olarak, yazabilirsiniz exec('/path/to/name.sh');ve komut dosyasını sunucuda çalıştıracaktır.

Ancak, bunu sadece onClickburaya koymak yeterli değildir. PHP ve sunucu tarafı web programlaması hakkında henüz bir bilginiz yoksa, önce birkaç öğreticiyi okumak ve sonra daha özel bir soru ile geri gelmek isteyebilirsiniz.


Uygun exec(...)komutla bir php dosyanız varsa , komut dosyasının yalnızca kullanıcı için değil, web sunucusunun bulunduğu grup için de yürütme izinlerine sahip olduğundan emin olun, bu nedenle en basit durumda 777.

Sorun olması durumunda echo exec(...);, herhangi bir hata olup olmadığını görmek için komut dosyasının dönüş değerini kontrol edin .

Komut dosyasını, tarayıcıdan değil, komut satırından da çalıştırabilirsiniz php /path/to/file.php.


Ayrıntılı cevap için çok teşekkürler. Kabuk betiği bilgisayarımda bulunur. Yazdıklarınızı deniyorum, ancak bir sorunla karşılaşıyorum. Yukarıdaki
sorumu

Tamam, bu farklı bir sorun. Aslında PHP yüklü mü? execYazarak satırın dönüş kodunu almaya çalışın echo exec(...);. Ayrıca, komut dosyasının yalnızca kullanıcınız için değil, web sunucunuzun çalıştığı grup için yürütme izinleri gerektirdiğini unutmayın.
slhck

evet her iki dosyada chmod 777 var. Ve php doğrudan kabuktan tuhaf sonuçlar ile çalıştırmayı denedim. pastebin.com/eU0xTkp2 Ancak, php yüklü, doğrulanmış php -vve insanların dosyaları düzenlemek için phpfilemanager olduğu gerçeği var. Neden php yorumlayıcısını kullanmıyor?
dukevin

php /var/www/trash/run.phpSadece PHP dosya adının kendisi ile değil , çalıştırmanız gerekir .
slhck

1
Bir şey değil! Özellikler konusunda çok emin değilim, ancak komut satırından çalıştırdığınızda, doğru kullanıcı olarak çalıştırdığınızda, tarayıcıdan çalıştırıldığında kullanıcı eksik olduğu için olmalıdır. Kabuk betiğin içinde bunu kontrol etmelisin, sanırım.
slhck

4

Bunun için biraz sunucu tarafı zekasına ihtiyacınız var. Statik olduğu için tek başına HTML yeterli değildir. Ortak bir yol php olacaktır. Barındırılan birçok teklif varsayılan olarak php yüklüdür.

Sunucunuzun kök dizinine bir metin dosyası koymak için bir ftp programı kullanabilirsiniz.

Metin dosyası şu içerikle "run.php" olarak adlandırılabilir:

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

Diyelim ki tarayıcınızda bu sayfayı ziyaret ederseniz alan adınızın "example.com" olduğunu varsayalım:

http://example.com/run.php

php dosyası sunucuda yürütülür. Bu başlık ile tarayıcıya bir HTML sayfası gönderir. Ve komut dosyası sunucuda yürütülür.

Akılda tutulması gereken bazı şeyler ve olası iyileştirmeler var:

1) Herkes bu sayfaya, ayrıca robotlara vurabilir. Sayfayı htacces ile güvence altına alabilirsiniz.

2) Bu sayfa, tarayıcıdan normal bir "GET" isteği olması durumunda tetiklenir. Ancak sunucuda bir eylem içerir ve bu eylem veri değiştirirse veya önemli bir şey yaparsa, komut dosyasını yalnızca POST isteği üzerine tetiklemek daha iyi olur.

3) Sayfayı yeniden yükleyebilmek / yürütebilmek için bir form / düğme ifadesi ekleyebilirsiniz. HTML form deyiminin method özniteliğinde doğru yöntemi (GET veya POST) kullandığınızdan emin olun.

4) Kabuk betiğinin sonucunu (rturn kodu ve belki metin çıktısı) almak ve tarayıcıya yazmak iyi olur. Bunun ayrı bir qustion için yeterli sorunları var :)


3

Bu bir izin sorunu olabilir.

Eğer kullanarak Tetiklendiğinde webapp , öyle apache senaryoyu çalışır. Eğer apache komut dosyasını çalıştırmak için izni yok işe yaramaz.

Çözüm: İzni kontrol edin ve tekrar deneyin .. :)


1

Bu geç olduğunu biliyorum ama ben bir sunucuda CGI yapılandırmak PHP veya tür herhangi bir şey kullanmadan bir sunucu tarafı bash komut dosyası çalıştırmak için izin olacağını düşünüyorum.

Bunun güncellenmiş soruyu ele almadığını biliyorum, ama bunu kendim anlamaya çalışırken buldum, bu yüzden göndereceğimi düşündüm!


0

Kabuk komut dosyalarını doğrudan tarayıcıdan çalıştırmak için, bu kuralı .htaccess dosyanıza eklemelisiniz:

Options +ExecCGI
AddHandler cgi-script .sh

Bu, web sunucusuna .sh dosyalarını CGI komut dosyaları olarak işlemesini söyler. .Sh dosya izinlerini 755 olarak değiştirmeyi unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.