2016-05-28 12 views
1

Ich versuche, meine Minecraft-Whitelist über PHP auf meinem Linux-Server zu aktualisieren. Die Verbindung funktioniert, aber ich weiß nicht, warum er meinen Befehl nicht gesendet hat, den Benutzer der Whitelist hinzuzufügen.ssh2 Verbindung zu Linux über PHP

Hier mein Code:

$name=$_POST['name']; 
$mc=$_POST['mc']; 
if($ssh = ssh2_connect('127.0.0.1', 22)) { 
if(ssh2_auth_password($ssh, 'root', 'password')) { 
    $stream = ssh2_exec($ssh, 'screen -R '.$mc.' && '.'whitelist add '.$name.' && whitelist reload'); 
    stream_set_blocking($stream, true); 
    $data = ''; 
    while($buffer = fread($stream, 4096)) { 
     $data .= $buffer; 
    } 
    fclose($stream); 
    echo $data; 
} 
} 
+0

Senden ungefilterten POST-Daten an die Shell wird nie gut enden. – rjdown

+0

Sie möchten den Befehl 'whitelist add xxx && whitelist reload' im Bildschirm ausführen? – Andrew

+0

ja zunächst möchte ich mit Bildschirm -R mctechnic um den Bildschirm zu öffnen, als ich userxyz hinzufügen Stab oh 2answers auf die weiße Liste xD ersten Mal nur knapp sein Ziel sehen @stackoverflow Ich habe versucht, es ohne POST Bildschirm -R mctechnic hat nicht funktioniert entweder zu tun – Baldrian

Antwort

1

Sie treten Befehle mit && und alle von ihnen werden eine nach der anderen in der aktuell Shell ausgeführt werden, nicht im Bildschirm. screen kann Befehle innerhalb einer ausgewählten Sitzung ausführen, jedoch mit einer eigenen Syntax. Siehe beispielsweise this question oder manual. In Ihrem Fall müssen Befehl wie folgt aussehen:

screen -S session_name -X stuff $'whitelist add user_name && whitelist reload\n' 

Hinweis \n Symbol am Ende der Zeichenfolge. Es wird benötigt, um den Befehl auszuführen, weil screen es nicht wirklich ausführen wird, screen wird "den angegebenen Befehl an eine laufende Bildschirmsitzung senden" wie Handbuch sagt. Beachten Sie, dass auf dem Bildschirm anstelle von Ihnen der Befehl eingegeben wird. Und wenn Sie den Befehl eingeben, müssen Sie die Eingabetaste drücken, um sie auszuführen.

In PHP können Sie Befehl ausführen auf diese Weise:

$stream = ssh2_exec($ssh, "screen -S $mc -X stuff \$'whitelist add $name && whitelist reload\\n'"); 
+0

genial es funktioniert thx <3 – Baldrian