via PHP auf eine Shell zugreifen

<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
);
$process = proc_open("ssh -l meine IP", $descriptorspec, $pipes);
if (is_resource($process)) {
echo fread($pipes[0], 2096);
fwrite($pipes[1], "befehl xyz");
fflush($pipes[1]);
fwrite($pipes[1], "befehl xyz");
fflush($pipes[1]);
fwrite($pipes[1], "befehl xyz");
.......
fflush($pipes[1]);
fclose($pipes[0]);
fclose($pipes[1]);
$return_value = proc_close($process);

echo "command returned $return_value\n";
}

Ich habe ca 3 fragen zu dem ding ^^

Hab ich das mit dem fwrite richtig vertanden ? also was da steht gibt mein php an die ssh console weiter ?

Wie funktioniert das mit dem auslesen ? wieso steht da return value ist 1 ?
Da oben stand ich soll den genauen pfad vom ssh tool angeben .. woher weiss ich ob sowas bereits installiert ist ? und wenn nicht woher bekommt man sowas ?

Mein zweck für das script ist im endeffekt das ich einen gameserver restartten will.
Und ich weiss wie ich es von hand mache und möchte meinen server einfach hintereinander mit den befehlen füttern .. hab mir das oben oft durchgelesen komme damit aber einfach nicht weiter. Wäre nett wenn ihr mir noch ein paar denkanschübe geben könntet wie ich das denn nun machen muss oder aber was ich falsch mache.

Danke
 
habe das selbe prob. und das selbe vor .....
müsste den befehl : /etc/init.d/hlds2_run stop ( oder start , restart... ) ausfüren .....
1. versuch :

PHP:
<?
$befehl ="/etc/init.d/hlds2_run ".$do;
echo "Server $do<br>\n";
echo $befehl,"<br>";
	exec ();
	exec ($befehl,$ausgabe,$return);
	$i=0;
	while ($i<=10)
	{
		echo $ausgabe[$i];
		$i++;
	}
	exec ("exit");
?>
wobei $do von h ttp://...... /server.php?do=start übergeben wurde ....
er hat die datei angesprochen , ausgeführt aber ohne effekt ...

2.versuch :
PHP:
<?
$passw = "root Password";
$serveradr = "server IP";
$befehl ="/etc/init.d/hlds2_run ".$do;
$ssh = ''; 
$err=''; 
$descriptorspec = array( 
	0 => array("pipe", "r"), 
	1 => array("pipe", "w"), 
   2 => array("file", "error.txt", "a") 
	); 
if (is_resource($ssh)==FALSE || $ssh=="")
{ 
	$ssh = proc_open("ssh -l cod ".$serveradr."", $descriptorspec, $pipes); 
   if (is_resource($ssh))
   { 
		fwrite($pipes[1],'root'); 

		fwrite($pipes[1],'$passw'); 
		fflush($pipes[1]);
 
 		fwrite($pipes[1],"/etc/init.d/hlds2_run ".$do); 
		fflush($pipes[1]);
		
		fclose($pipes[0]);  
		fclose($pipes[1]); 
 $return_value = proc_close($ssh); 
		echo "SSH Connection Successfull  ..  $return_value<br>"; 
	}
	else
	{ 
		echo "SSH Connection failed<br>"; 
	} 
}
?>
wobei $do von h ttp://...... /server.php?do=start übergeben wurde
ebenso kein effekt , und ausgabe : SSH Connection Successfull
in error.txt dieses :
Pseudo-terminal will not be allocated because stdin is not a terminal.
Host key verification failed.

irgentwie komm ich nimmer weiter. .....
kann mir da mal einer helfen
BIG THX im voraus
**GHOST**

ps: ich will keinen fertigen code , sondern nur nen tip oder ähnliches das ich mal weiterkomme THX
 
Zuletzt bearbeitet von einem Moderator:
Hi, ich bin das Problem mit Bubblez mal durchgegangen. Ich denke wir haben ne brauchbare Lösung gefunden.

Habe eine kleine PHP-Klasse geschrieben, mit der es ganz einfach sein sollte, Befehle auf Remoterechnern via Webinterface(PHP) auszuführen.

Runterladen könnt ihr euch das Script unter folgendem Link
SSHExec-PHP-Klasse
Die Anleitung unter Readme.txt sollte selbsterklärend sein.

ansonsten könnt ihr mr auch gerne ne Mail unter daniel.altiparmak@systenius.de shreiben.

Have Fun.


P.S. Ich suche ne Seite, auf der ich das Script veröffentlich kann, dass noch mehren geholfen wird.

P.P.S.S Desweitere suche ich SSH - Errorcodes, kann mir da jemand vielleicht helfen ?
 
Moin


hab mir die classe angesehen und ausprobiert, geht einwandfrei ;)

Aber kann man so auch irgendwie Dateien editieren, die auf dem anderen Rechner sind ?
 
Zurück