Man kann ja alles als URI ausdruecken. Leider stellt sich dabei immer die Frage, ob es auch verstanden wird. Defaultmaessig versteht Windows leider zimlich wenig. Aber erfreulicherweise kann man hier nachruesten. Danach kann man auch durch Eingabe von ssh://host in der Ausfuehren-Zeile (Also dem Dialog, der auf Windows-R folgt) eine ssh-Verbindung anleiern.

Beim Verstaendnis von URIs geht es im wesentlichen um das Protokoll, also ob am Anfang ein http, telnet oder mailto steht. Denn hiernach muss entschieden werden, welche Anwendung geeignet ist, diesen URI zu oeffnen. Das ganze wird unter Windows in der Registry -- wo auch sonst -- festgehalten. Und entsprechend einfach laesst sich ein weiteres Protokollhandle einbauen (s. a. http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx): Durch ein paar Eintraege. In diesem Beitrag soll die Unterstuetzung fuer URIs nach dem ssh://-Schema gezeigt werden. Dabei wird angenommen, dass PuTTy unter C:\users\ad001\bin\putty.exe liegt.

Die entsprechenden Einstellungen liegen im Hive HKEY_CLASSES_ROOT -- dort wo auch die Dateiendungen zugeordnet werden. Um also ein neues Protokoll zu unterstuetzen wird es wie eine Dateiendung eingefuegt, wenn auch ohne Punkt. Es wird also ein Schluessel HKCR\ssh angelegt. Dieser bekommt nun in seinen Standardwert etwas dekoratives wie URI:ssh. Nun kommt der entscheidende Teil, anhanddessen sich eine Dateiendung von einem URI-Handler unterscheidet: Es wird ein String-Eintrag mit dem Namen URL Protocol (ohne einen Wert) angelegt. Anschliessend kann ein Unterschluessel DefaultIcon angelegt werden, dessen Default-Eintrag das Icon beschreibt -- Ueblich ist hier der Verweis auf eine ausfuehrbare Datei oder eine Bibliothek nebst Icon-Index in der Form PfadZur\Datei.dll,Index. Damit ist aber noch nicht klar, wie das Protokoll zu oeffnen ist. Hierzu wird der Schluessel HKCR\ssh\shell\open\command angelegt. Der unter command befindliche Default-Wert ist schliesslich der auszufuehrende Befehl, dem die URI als %1 uebergeben wird.

Jetzt bleibt noch ein Problem: Das ausgefuehrte Kommando bekommt als Parameter den kompletten URI. Gegebenenfalls mit einem Abschliessenden / nach dem Hostnamen -- so dass immer eine konkrete Ressource adressiert ist. Bloederweise koennen viele Programme nicht mit dieser URI-Schreibweise zurecht. Im konkreten Beispiel: Wenn man Putty mit dem Parameter ssh://somehost/ aufruft, wird es sich beschweren, den Host "ssh" nicht gefunden zu haben. Sollte es den Host finden, wird es sich wohl als naechstes Beschweren, dass der Port "//" nicht geparst werden kann. Entsprechend muss da noch eine Filterinstanz zwischen. Das kann ein Batch-File machen. Es muss nur in der Lage sein, einen Substring zu bilden. Ob das Windows-Batchfiles koennen?

Ja, man kann: http://stackoverflow.com/questions/636381/what-is-the-best-way-to-do-a-substring-in-a-batch-file (der wesentliche Beitrag dabei ist uebrigens vom http://hypftier.de). Auch wenn die Syntax ein wenig esoterisch wirkt.

Also ist die Gesamtstrategie klar: Im Registryeintrag als ausfuehrbare Datei ein Batchfile angeben, aus dem heraus PuTTy mit geeignet beschnittenem Parameter aufgerufen zu werden. Dabei das PuTTy mittels start aufrufen, ansonsten bleibt das Fenster des Batch-Jobs bestaendig offen. Voila.

Als Registry-Export sieht das dann so aus:

Windows Registry Editor version 5.00

[HKEY_CLASSES_ROOT\ssh]
@="URL:ssh"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\ssh\DefaultIcon]
@="C:\\Users\\ad001\\bin\\putty.exe,0"

[HKEY_CLASSES_ROOT\ssh\shell]

[HKEY_CLASSES_ROOT\ssh\shell\open]

[HKEY_CLASSES_ROOT\ssh\shell\open\command]
@="C:\\Users\\ad001\\bin\\launchSSH.bat %1"
Und so sieht dann das Batchfile aus:
set param=%1
start C:\users\ad001\bin\putty.exe %param:~6,-1%

Fortgeschrittene Uebungsaufgabe: Implementieren Sie das Protokoll abfahrtsplan, welches der folgenden Spezifikation gehorcht:

Frohes Basteln!

Stichworte:


Impressum