Shellcommando's naar linux sturen via web login ?

Pagina: 1
Acties:

  • Honnes
  • Registratie: December 2003
  • Laatst online: 18-03 10:19
Ik heb onlangs een game server opgebouwd met als OS Suse 9.2. Ik heb hierop een aantal dedicated servers staan die ik kan starten met shell scripts. Dat draait en wil allemaal goed, alleen die machine staat niet bij mij thuis maar op mijn stage plaats.

Ik heb zodoende een PHP site gebouwd waarop ik moet inloggen om verder te gaan, en wat ik nu wilde bereiken is dat ik op het knopje "Start CS Server" druk, dat ie dan daadwerkelijk het commando "/home/honnes/servers/hld_s/sh start.sh" naar de server stuurt. (Die start.sh heb ik zelf gemaakt en staat gewoon de options en start regel in van de server.)

Daarnaast wil ik dan nog een paar knoppen maken zoals het killen van dat process, of een stop ervan, maar dat lukt me vast wel zodra ik de basis knop heb. Ik heb wel op google zitten zoeken en heb een PHP to shell gevonden, waarin ik op mijn machine kan inloggen en gewone shellcodes kan sturen.

Als iemand me kan helpen zou dat fantastisch zijn.

( NB: Mijn site en gameserver zijn momenteel alleen nog intern bereikbaar )

  • Wilke
  • Registratie: December 2000
  • Nu online

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

je bent bekend met ssh? dat lijkt mij makkelijker ;)

en trouwens ook veiliger

It sounds like it could be either bad hardware or software


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

smokalot schreef op woensdag 01 juni 2005 @ 13:32:
je bent bekend met ssh? dat lijkt mij makkelijker ;)

en trouwens ook veiliger
Mwah, een https verbinding kan ook wel veilig genoeg zijn hoor ;)

@TS: mocht je problemen krijgen met de rechten van de gebruiker dan kan je eventueel nog iets als "ssh gebruiker@server.nl /start.sh" uitvoeren om wel die rechten te krijgen.
De authenticatie moet dan wel via keys verlopen maar dat is wel een reeele mogelijkheid.

[ Voor 5% gewijzigd door Wolfboy op 01-06-2005 13:35 ]

Blog [Stackoverflow] [LinkedIn]


  • Amazed
  • Registratie: Juli 2003
  • Laatst online: 11-03 21:24

Amazed

=]

Vergeet ook niet dat je webserver als een apparte gebruiker draait, en deze dus geen rechten in jouw profiel heeft. Je zult dan wat rechten komen te veranderen.

En als je dat hebt geregeld werkt die misschien ook wel:
PHP:
1
$query = `/home/honnes/servers/hld_s/sh start.sh`;


Voor het proces te vinden enzo zo ik je CS server trouwens in een screen stoppen en deze dan een mooie screen naam geven. Das makkelijk te vinden en te killen. (screen -A -m -d -S SCREENNAAM ./proces)

be AmazeD


  • Honnes
  • Registratie: December 2003
  • Laatst online: 18-03 10:19
SSH is inderdaad (ook) veilig, maar ik wil bijvoorbeeld ook dat mijn broer die weinig tot geen verstand er van heeft zoiets dan op kan starten door simpel weg een klikje op een button ;)

Een screenname heb ik inderdaad ook mee zitten prutsen, moet hem nog een beetje recht zetten. Uiteraard draai ik het niet onder de root user of gebruiker met enige beheer rechten.

Trouwens met dat exec command, ik had niet gedacht dat het zo (simpel) kon gaan. In die PHP shell code die ik namelijk gebruikte had je steeds cwd commands e.d (zit er nu niet achter dus kan zo niet controleren). Maar daar kreeg je ook steeds de history terug te zien.

Ik ga dan zodadelijk er even mee aan de slag. Als het me gelukt is óf als er iets nog niet lukt horen jullie het binnenkort (enkele dagen?) wel.

  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 28-02 01:03

daft_dutch

>.< >.< >.< >.<

Kan je dan niet een schell scripje maken dat je broertje alleen maar hoeft uit tevoeren

./start_de_game_server
./stop_de_game_server

of

./gameserver {start stop restart}

in .bashrc kan je cat howto zetten en in howto is uitleg van de commandos

>.< >.< >.< >.<


  • Honnes
  • Registratie: December 2003
  • Laatst online: 18-03 10:19
edit:
**Het hele bericht heb ik weg gehaald, omdat ik ineens de oplossing vond**


Ik heb het nu voor elkaar gekregen. Ik zet hieronder even neer hoe het geklaard is.
<?
if ($_GET["option"]=="start") {
chdir("/home/user/servers/game/"); //Deze chdir changed jouw working dir.
exec("screen -m -d -S SOCKET ./start.sh"); //Commando dat in de dir wordt uitgevoerd.
sleep (3);
}
$output = shell_exec("screen -ls");

echo "<pre>$output</pre>"; // (detached) aanwezige screens bekijken

?>

Killen kun je uitzoeken met grep en awk commands, maar dat is in dit geval offtopic. Heb ik weer wat geleerd :-) Nog bedankt mensen.

[ Voor 96% gewijzigd door Honnes op 07-06-2005 13:09 . Reden: Heb de oplossing gevonden, dan is deze vraag overbodig. ]


  • Honnes
  • Registratie: December 2003
  • Laatst online: 18-03 10:19
Ik ben er nu even mee bezig geweest en heb wat combinaties gemaakt van shell_exec en exec commando's. Alleen ben nu de hele dag met een nieuw probleem op m'n schouders. Google bracht me niet ver, want ik zag alleen wat ik al wist.

Het probleem is als volgt:

- ik stuur de commando's

chdir("/home/USER/servers/COD/"); // Call of Duty DIR
exec("`screen -A -m -d -S COD ./cod_lndexed`"); // COD Server Starten

Wat er nu gebeurd is als volgt, er wordt een screen voor minder dan 1 seconde gemaakt, oftewel, de screen wordt opgebouwd en meteen afgebroken. Wanneer ik dit commando zonder ./cod_lndexed stuur wordt er een normale screen sessie gemaakt. Ik heb zelf ook al gebrobeerd om via SH scripts die dingen te starten.

Bovenstaande gebeurd niet wanneer ik hetzelfde commando op mijn normale useraccount uitvoer. (ook inclusief screen commando)

Ik heb de hele map al ge-chmod en ge-chowned , maar tevergeefs helpt dat ook niet. Iemand van jullie die raad weet ?

(nb: heb reply gedaan zodat topic weer bovenaan komt, en het is een nieuw probleem die betrekking heeft tot dit topic.)

  • Amazed
  • Registratie: Juli 2003
  • Laatst online: 11-03 21:24

Amazed

=]

zet er eens -L bij in het screen commando
Hij maakt dan in de map /home/USER/servers/COD/ een log file aan: screenlog.0

Wie weet kan je daar uithalen wat er fout gaat

be AmazeD


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 17-03 12:25
werkt hier prima! ik geef ff mn index.php + hlds.sh :)

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
$dir = "/local/hlds/";
session_start();
if ($_GET["option"]=="start") {
chdir("$dir");
exec("./hlds.sh start");
sleep (1);
}
if ($_GET["option"]=="stop") {
chdir("$dir");
exec("./hlds.sh stop");
}
if ($_GET["option"]=="restart") {
chdir("$dir");
exec("./hlds.sh restart");
sleep (1);
}
chdir("$dir");
$status = exec("./hlds.sh status");
echo "HLDS is: ";
echo $status;
echo "<br><br>";
echo "<a href='index.php?option=start'>HLDS Starten!</a><br>";
echo "<a href='index.php?option=stop'>HLDS Stoppen!</a><br>";
echo "<a href='index.php?option=restart'>HLDS Herstarten!</a><br>";
echo "<a href='index.php'>Status Verversen!</a>";
?>

hlds.sh
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh
# HLDS init/update script

PATH=/bin:/usr/bin:/sbin:/usr/sbin
user="username"
pass="password"
DIR="/local/hlds"
DESC="Half-Life Dedicated Server"
NAME="hlds"
DAEMON="$DIR/hlds_boost"
PARAMS="-game cstrike +ip 10.0.0.250 +map fy_pool_day +maxplayers 12"
USER=user
PASS=pass

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   
   echo -n "Starting $DESC: $NAME"
   cd $DIR
   screen -d -m -S $NAME $DAEMON $PARAMS
   echo " ... done."
   ;;

 update)
   echo "Updating $DESC:Cstrike"
   cd $DIR
   $DIR/steam -command update -game cstrike -dir $DIR -username $USER -password $PASS -remember_password -verify_all -retry
   ;;

 status)
   ps aux | grep -v grep | grep hlds_r > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UP" || echo "DOWN"
   ;; 
 
 *)
   echo "Usage: $0 {start|stop|status|restart|update}"
   exit 1
   ;;
esac

exit


vergeet niet je HLDS map te chownen door de apache user! www-data of apache oid!

[ Voor 19% gewijzigd door Luqq op 17-06-2005 20:36 ]


  • mocean
  • Registratie: November 2000
  • Laatst online: 24-02 18:09
Honnes schreef op woensdag 01 juni 2005 @ 13:24:
[...]
, alleen die machine staat niet bij mij thuis maar op mijn stage plaats.
[...]
Ben wel benieuwd of dit onderdeel is van je stage of niet?

Koop of verkoop je webshop: ecquisition.com


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 17-03 12:25
Heb hem nu zelfs zover gekregen om hlds te kunnen updaten!
hlds.sh
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
PATH=/bin:/usr/bin:/sbin:/usr/sbin
USERNAME="user"
PASSWORD="pass"
DIR="/local/hlds"
DESC="Half-Life Dedicated Server"
NAME="hlds"
DAEMON="$DIR/hlds_boost"
PARAMS="-game cstrike +ip 10.0.0.250 +map fy_pool_day +maxplayers 12"

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   
   echo -n "Starting $DESC: $NAME"
   cd $DIR
   screen -d -m -S $NAME $DAEMON $PARAMS
   echo " ... done."
   ;;

 status)
   ps aux | grep -v grep | grep hlds_r > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UP" || echo "DOWN"
   ;;

 update)
   echo "Updating $DESC: $NAME"
   cd $DIR
   screen -d -m -S update $DIR/steam -command update -game cstrike -dir $DIR -username $USERNAME -password $PASSWORD
   ;;

 ustatus)
   ps aux | grep -v grep | grep steam > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UPDATING" || echo "NOT UPDATING"
   ;;

 ustop)
   if [[ `screen -ls |grep update` ]]
   then
       echo -n "Stopping Updater"
       kill `screen -ls |grep update |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
      echo "Coulnd't find a running updater!"
   fi
   ;;


 *)
   echo "Usage: $0 {start|stop|restart|status|update|ustatus|ustop}"
   exit 1
   ;;
esac

exit

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?
echo "<br><br><br><br><br>";
$dir = "/local/hlds/";
if ($_GET["option"]=="start") {
    chdir("$dir");
    exec("./hlds.sh start");
    sleep(1);
}
if ($_GET["option"]=="stop") {
    chdir("$dir");
    exec("./hlds.sh stop");
}
if ($_GET["option"]=="restart") {
    chdir("$dir");
    exec("./hlds.sh restart");
    sleep(1);
}
if ($_GET["option"]=="update") {
    chdir("$dir");
    shell_exec("./hlds.sh stop");
    exec("./hlds.sh update");
}
if ($_GET["option"]=="stopupdate") {
    chdir("$dir");
    shell_exec("./hlds.sh ustop");
}
chdir("$dir");
$status = exec("./hlds.sh status");
echo "<p align='center'>HLDS is: ";
echo $status;
echo "<br><br></p>";
$updatestatus = exec("./hlds.sh ustatus");
echo "<p align='center'>HLDS is currently: $updatestatus</p>";
echo "<p align='center'><br><br></p>";
if ($updatestatus == "UPDATING") {
    echo "<p align='center'>Cannot start server while updating, please wait or stop the updater!<br><br></p>";
    echo "<p align='center'><a href='index.php?option=stopupdate'>Stop the updater!</a><br></p>";
}
if ($updatestatus == "NOT UPDATING") {
    echo "<p align='center'><a href='index.php?option=start'>Start HLDS!</a><br></p>";
    echo "<p align='center'><a href='index.php?option=stop'>Stop HLDS!</a><br></p>";
    echo "<p align='center'><a href='index.php?option=restart'>Restart HLDS!</a><br></p>";
    echo "<p align='center'><a href='index.php?option=update'>Update HLDS!</a><br></p>";
}
echo "<p align='center'><a href='index.php'>Refresh!</a><br></p>";


btw, wel handig om ff een .htaccess + .htpasswdje te maken, vind ik toch wel ff wat makkelijker dan een loginsysteem in php :P

[ Voor 44% gewijzigd door Luqq op 21-06-2005 17:55 ]


  • Parasietje
  • Registratie: Juli 2004
  • Laatst online: 10-06-2024

Parasietje

linux-geek

Zijn jullie niet bang om dat allemaal te laten uitvoeren door de apache user?
Ik zou netjes met sudo je permissies veranderen naar een aparte user...

WebDAV in Vista is horribly broken. Ik wil het fixen, maar ben nog steeds op zoek naar de tarball met de source...


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 17-03 12:25
moet ik nog even uitzoeken hoe dat allemaal moet...wel goed idee aangezien dit idd niet veilig is, maar het werkt!


Edit:
Heb het uitgezocht, 2 lijntjes in visudo:
code:
1
2
www-data        ALL = (hlds1) NOPASSWD: /local/servers/hlds1/
www-data        ALL = (srcds1) NOPASSWD: /local/servers/srcds1/

En in index.php voor elk command(./hlds.sh [blabla]) dit zetten
code:
1
sudo -u hlds1

Hlds1 mogelijk vervangen door srcds1

[ Voor 61% gewijzigd door Luqq op 23-06-2005 09:53 ]


Verwijderd

ik zit met een probleem met betrekking tot dit.

als ik via php shellexec of exec gebruik met screen, dan krijg ik de volgende melding: Must be connected to a terminal.

Iemand enige idee?

OS is debian en apache 1.3

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 04:54

Gerco

Professional Newbie

Screen is een terminal multiplexer en heeft daar dus een terminal voor nodig om te multiplexen :)

Je kan "screen -d -m" proberen om hier omheen te komen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

dat werkt dus niet, ik krijg geen return als ik dat dus echo. Maar ik krijg ook geen extra screen bij screen -ls

Ok de scripts van de TS werken niet, hij kan wel prima het status script uitvoeren, maar start vervolgens geen screen/hlds

Dus het lijkt erop dat er iets mis gaat met screen/hlds. Omdat hij dus wel bash kan uitvoeren...gek genoeg.

laatste edit: Het lijkt er nu ook op dat ie niks kan afbreken/terminaten dmv grep iemand ingeef? :)

[ Voor 65% gewijzigd door Verwijderd op 28-08-2005 20:49 ]


  • Lethalis
  • Registratie: April 2002
  • Niet online
Parasietje schreef op woensdag 22 juni 2005 @ 17:28:
Zijn jullie niet bang om dat allemaal te laten uitvoeren door de apache user?
Ik zou netjes met sudo je permissies veranderen naar een aparte user...
Ja inderdaad, ze vragen er haast om geroot te worden :)

[edit]
Het lijkt me sowieso beter om er een stap tussen te plaatsen. De website gebruiker hoort eigenlijk sowieso geen of nauwelijks rechten op de machine te hebben.

[ Voor 22% gewijzigd door Lethalis op 29-08-2005 11:05 ]

Ask yourself if you are happy and then you cease to be.


  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 06-01 11:08
Idd, door dit soort scripts zijn al menig mensen in de problemen gekomen!! Dit is dan geloof ik ook de reden voor de makers van bijvoorbeeld sellinux om dat soort paketten te ontwikkelen. Misschien is het een optie om een webmin module te gebruiken voor het beheren van je cs-server? Ik heb net even gekeken, ik weet niet of het wat is. http://www.xoverzero.com/hap/webmin.cfm

Een echte golver is nooit uitgeput


  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

Je kunt ook cron laten kijken of een bepaald bestandje bestaat.
Bestandje is er == start. (php touch start)
Bestandje is er niet == stop. e.d.(php unlink start)

[ Voor 13% gewijzigd door Grom op 29-08-2005 14:01 ]


  • Lethalis
  • Registratie: April 2002
  • Niet online
Grom schreef op maandag 29 augustus 2005 @ 13:55:
Je kunt ook cron laten kijken of een bepaald bestandje bestaat.
Bestandje is er == start. (php touch start)
Bestandje is er niet == stop. e.d.(php unlink start)
Ben ik de enige die dit een beetje vreemd vind klinken? :+

[edit] Ik hoop dat je op z'n minst gaat checken of je service al draait.

[ Voor 27% gewijzigd door Lethalis op 29-08-2005 16:03 ]

Ask yourself if you are happy and then you cease to be.


  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

Ik gebruik deze methode om mijn webcam van afstand aan en uit te kunnen zetten.
De check of hij aan staat is dan door de webcampagina te bezoeken (beeld=aan ....)

Geen problemen met rechten e.d.
Alleen even wachten tot cron de job afhandelt.
Pagina: 1