Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: XaugyTuH в Dec 08, 2004, 17:32



Титла: Отдалечено управление
Публикувано от: XaugyTuH в Dec 08, 2004, 17:32
Искам да направя следното нещо:
Чрез уеб страничка да си управлявам компютър, който се намира в локалната мрежа. Например като натисна бутонче и да се рестартира, с друго бутонче да се гаси, с трето да се стартира  да речем някаква програма или да се килва някакъв процес например и каквото ми дойде там на ум. Предполагам, че за целта трябва да напиша програмка, която да работи на отдалеченият компютър и да слуша на даден порт за съобщения изпратени от мен чрез страничката и да върши съответната задача.
Въпросът ми е как точно ще стане комуникацията с тази програмка, как ще приема командите?
За предпочитане е  да е на PHP.
Ако някой ме насочи към нещо подобно ще съм много благодарен.


Титла: Отдалечено управление
Публикувано от: n_antonov в Dec 08, 2004, 17:36
Какво ти пречи да ползваш за целта Webmin?

А, искаш и да се стартира. Е, това вече е интересно как ще става през уебинтерфейс;)


Титла: Отдалечено управление
Публикувано от: betso в Dec 08, 2004, 18:04
PHP предлага възможност за изпълнение на системни команди по същия начин, както bash го прави - когато командата е в единични, наклонени кавички, например:
Цитат
`echo "running apache as root is not a good idea"`

За да изпълняваш root-команди през web, ще се наложи да пуснеш webserver-а си като root, което не е добро решение. В случай, че наистина искаш да направиш подобно нещо, можеш да си направиш обикновена form-а на html, която да POST-ва зададената от теб команда на един php-скрипт, който да я изпълнява по посочения по-горе начин.
Ако вкараш apache (или каквото там пуснеш) в sudoers може да постигнеш частично по-добро решение, макар че пак ще куца много сериозно по отношение на сигурността.
Може би по-добрият вариянт за това, което искаш да направиш, е все пак ssh. :)


Титла: Отдалечено управление
Публикувано от: в Dec 08, 2004, 19:39
Друго (по-сложно) решение е клиент-сървър приложение. Сървърната част ще бъде на машината, която искаш да управляваш (демон без никакъв потребителски интерфейс, който например при стартиране да получава параметър на кой порт да слуша), а клиентската да се направи с графичен потребителски интерфейс. Реализира се прост протокол за комуникция, например

клиент               сървър
REBOOT              рестартира
SHUTDOWN         гаси компютъра
PS                     връща списък с процесите (разделени с някакъв символ)
KILL #nomer        убива процеса с PID #nomer

и така нататък.
Задачата не е сложна и може да ти послужи като стимул да се научиш да програмираш (ако не можеш де!).

Успех!


Титла: Отдалечено управление
Публикувано от: в Dec 08, 2004, 19:44
Съжалявам, че изпуснах най-важното- езика за програмиране може да е С/С++ или perl (най-популярни). За клиента можеш да ползваш GTK модула за пърл, с който си правиш графичен интерфейс ;)
И все пак доста ще се поозориш докато постигнеш функционалността на ssh.

Успех!


Титла: Отдалечено управление
Публикувано от: XaugyTuH в Dec 08, 2004, 19:56
Значи Webmin не го знам какво е, ще го погледна и дано да върши работа. Благодаря за съвета. А за стартирнето става въпрос за стартиране на приложения, а не за стартиране на компютъра.
@betso - схемата която си представям е следната. Страничката е да речем на PC1, аз я зареждам от PC2 и с форма или с бутон, (предполагам че няма значение) предавам командата на PC3, където както казваш работи скрипт, който изпълнява дадената команда. И през ума ми не е минавало да си пускам Апачето като рут. Въпросът ми е както вече казах: как точно от формата в страничката командата се предава на скрипта, който работи на друг компютър? Може да е нешо елементарно, обаче аз нещо не мога да вдяна.  ???  Търсих насам натам, изчетох документацията на socket командите, обаче пак не мога до го измисля.
Благодаря отново и се надявам на по-детайлно обяснение.


Титла: Отдалечено управление
Публикувано от: XaugyTuH в Dec 08, 2004, 20:27
Понеже съм писал поста си докато wh331 е писал  и не съм го прочел  да добавя: идеята е точно да има скриптче, което работи като демон и приема команди, уеб страничката замества програмирането на графичен интерфейс, защото на мен така ми е по-лесно. Пак повтарям - проблемът ми е, че не знам как точно да реализирам комуникацията на клиента със сървъра. За някои може да е елементарно, обаче като за мен ако може едно обяснение няма да е зле.  ;)  И понеже съм си избрал да е на PHP ако може да е за този език.


Титла: Отдалечено управление
Публикувано от: empty в Dec 09, 2004, 03:24
Цитат (n_antonov @ Дек. 08 2004,18:36)
Какво ти пречи да ползваш за целта Webmin?

А, искаш и да се стартира. Е, това вече е интересно как ще става през уебинтерфейс;)

Както човека вече каза WebMin е точно това което търсиш.
http://webmin.com/ е адреса на WebMin. Много е полезен и дори за машината на която работиш защото можеш лесно да направиш настройки на всичко без да губиш време. Няма смисъл да правиш нещо което хората вече са го направили.


Титла: Отдалечено управление
Публикувано от: kostadinz в Dec 09, 2004, 10:27
можеш да направиш формата с php скрипт, който в една директория само създава файлче с пододящо име напр.:
halt.cmd
killpid.3244
reboot
restart.httpd
restart.smb
list_pids
runme.sh   ......
или да пишеш желания процес или демон, a защо не и скрипт вътре във файла.
и  в cron-a слагаш един скрипт дето да дебне наличието на файлчето. Ако го намери го трие и пуска съответната поредица команди.
файла трябва да се намира в директория достъпна и за уеб сървъра и за cron демона


Титла: Отдалечено управление
Публикувано от: Йордан в Dec 09, 2004, 12:03
Може Апаха да не работи под роот, но трябва да се окаже дадения скрипт да се изпълнява от роот. Подобно нещо за иптаблес имаше на сайта. В тази статия беше обяснено за УИД=0

Успех


Титла: Отдалечено управление
Публикувано от: в Dec 09, 2004, 17:24
Здравей, XaugyTuH!
В интернет има доста материали, посветени на програмирането със сокети в РНР (например тук). Малко четене и няма да имаш никакъв проблем да се справиш. Но преди да започнеш експериментите, трябва да провериш дали РНР-то ти е компилирано с поддръжка на сокети. А именно,  ако получиш съобщение за грешка, че функцията socket() не е дефинирана, трябва да прекомпилираш РНР като изпълниш конфигурирането с параметър
Цитат
./configure --enable-sockets

Успех!


Титла: Отдалечено управление
Публикувано от: в Dec 17, 2004, 18:04
probvaj da razbere6 kak dejstva HTTP ;) ne e slojen protokol i e to4no tova koeto ti trqbva... ako dyrjish da ne polzvash gotova programa


Титла: Отдалечено управление
Публикувано от: XaugyTuH в Dec 24, 2004, 06:05
Благодаря на всички за съветите.  Работата ще стане.  :)
Последно се спрях на варианта 'клиент - сървър'. Както каза wh331 малко четене и всичко става.
Идеята на kostadinz също е интересна. Може да я приложа в някой друг случай.
А сега един друг въпрос, малко встрани от темата: може ли  от уеб страница да се укаже по някакъв начин на браузъра, който я е заредил да я презарежда на определен интервал от време, да речем една минута, без да се налага да се натиска refresh бутона? И естествено, ако има начин, някакви напътствия как става това?


Титла: Отдалечено управление
Публикувано от: Йордан в Dec 24, 2004, 08:56
<meta http-equiv="refresh" content="300">
Това е за пет минути
<meta http-equiv="refresh" content="60">
а това за една


Титла: Отдалечено управление
Публикувано от: XaugyTuH в Dec 25, 2004, 00:29
Мерси много GigaVolt.  :)  :)  :)
Съжалявам много обаче отдавна не съм се занимавал с програмиране и сега гледай за какви работи трябва да откривам топлата вода.  :(  Ама ще се оправим. Като пораснем.  ;)  Сега ако ми кажеш и къде по сайта има статия за стартирането на скриптове (или каквото и да е) като root, цена няма да имаш.Аз не намерих.
Мерси отново и Весела Коледа на всички.


Титла: Отдалечено управление
Публикувано от: VladSun в Dec 30, 2004, 16:46
root@server:# chmod 6755 executable_file


Титла: Отдалечено управление
Публикувано от: toxigen в Jan 25, 2005, 12:34
Ако все още мислиш да го правиш с уеб интерфейс ето начина:
имаш два скрипта на PHP (каза, че предпочиташ), единия е този, който изпълнява нещата, т.е. този, който ще ти командва компютъра и е примерно следния:
execute.php
Примерен код

<?php
   $command=$_POST['command'];
   exec ($command);
?>

Това е най-простия вариант.
От друга страна имаш един HTML файл, който ти се явява в браузъра, например:
admin.html
Примерен код

<html>
<body>
<form method="post" action="execute.php">
<input type="text" name="command"><br>
<input type="Submit" value="Execute">
</form>
</body>
</html>

Това е схемата накратко. Естествено ще трябва да си го доработиш, но ако създадеш тези два файла в някоя директория на апаха и отвориш в браузъра admin.html ще можеш да си изпълниш каквото искаш. Ако искаш и да ти връща изхода от командата пак има начини - виж psopen в php.net
Надявам се да е полезно поне за някой друг път (сега ще го правиш клиент сървър)


Титла: Отдалечено управление
Публикувано от: Йордан в Jan 25, 2005, 12:57
да, но няма начин да пуснеш нещо с UID=0 :)


Титла: Отдалечено управление
Публикувано от: toxigen в Jan 25, 2005, 14:18
То има ама никой не иска да става така.... Само показах схемата.
Иначе варианта със сокетите е добър, но мисля че клинтската програма ще му отнеме повече време отколкото очаква.....