[Quicktip] ssh Verbindung ohne Known-Hosts Eintrag

Es gibt gute Gründe, warum ssh die Fingerprints (also die virtuellen Fingerabdrücke) der Server speichert, mit denen man sich verbindet. Tut man dies nämlich erneut, so kann ssh prüfen, ob sich hinter dieser IP bzw. hinter diesem Hostnamen noch immer der gleiche Rechner befindet. Wenn nicht, gibt’s eine Warnung.

Nun gibt es aber auch Fälle, bei denen will man diesen Schutz unterbinden – vornehmlich beim Scripting. Und das macht man so:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@server

Was passiert? Mit dem ersten Parameter wird das known-hosts-File “/dev/null”, also “nichts”, verwendet. Parameter 2 gibt an, dass die Überprüfung der Fingerprints deaktiviert werden soll. Lässt man den ersten Parameter weg, so werden trotzdem die Fingerprints in der normale known-hosts-File geschrieben.

[Quicktip] GIT Commit/Merge auf github rückgängig machen

Folgendes Problem: Ihr habt ein paar Änderungen commited und auch schon gepushed – in meinem Fall zu github -, merkt dann aber, dass ihr was falsches commited habt. Was nun?

Zuerst könnt ihr mit eurem GIT Client auf die Version resetten, die noch ok war. Oder ihr macht das per Git-Bash:

git reset --hard [Hashwert des gültigen Commits]

Damit setzt ihr euren Stand direkt auf diesen Commit zurück. Achtung! Wenn ihr den Parameter –hard verwendet werden sämtliche Änderungen überschrieben – und alle nachfolgenden Commits werden gelöscht!

Anschließend führt ihr ein

git push -f

aus und schon wird der Reset auch an Github oder evtl. andere entfernte Repositories übertragen. Achtung auch hier: die nachfolgende History wird gelöscht, auch von github. Wenn ihr den Parameter -f (für “force”) weglasst, so wird euch der Push verweigert, da ihr ja einen älteren Stand als im Repository pushen wollt. Daher ist er zwingend nötig.

[php] URLs effektiver zusammensetzen

Als PHP Entwickler muss man sich ja auch ab und zu mal um den Zusammenbau von URLs kümmern – entweder wird einem diese Arbeit von einem Framework abgenommen, oder man muss manuell ran. Mir geht es hier um den manuellen Weg. Man kann da folgendermaßen rangehen:

$url = "http://host/?id=10";
if($_GET["name"] != "")
{
	$url .= '&name='$_GET["name"];
}
if($_GET["country"] != "")
{
	$url .= '&country='$_GET["country"];
}
usw.


Wie man sieht, muss man für jeden eventuellen Parameter eigene if-Abfragen bauen, deren Muster ist aber immer das gleiche. Was spricht also dagegen, es folgendermaßen zu lösen?

$url = "http://host/?id=10";
$parameters = array(
	array("name"=>"name", "value"=>$_GET["name"]),
	array("name"=>"country", "value"=>$_GET["country"])
);
foreach($parameters as $parameter)
{
	if($parameter["value"] != "")
	{
		$url .= '&'.$parameter["name"].'='.$parameter["value"];
	}
}

Ok, im ersten Moment ist der neue Code bei gleichem Ergebnis etwas umfangreicher, jedoch ergibt sich ein erheblicher Vorteil, wenn neue Parameter dazu kommen. Denn nun muss man einfach dem $parameters-Array ein neues Element hinzufügen und schon wird dieses mit in die URL eingebaut.