Posts mit dem Label SSH werden angezeigt. Alle Posts anzeigen
Posts mit dem Label SSH werden angezeigt. Alle Posts anzeigen

Freitag, 25. April 2008

Links SSH und SFTP in C#

Wie im vorherigen schon erwähnt beschäftige ich mich gerade mit SFTP und SSH. Leider gibt es nicht viel an Vorlagen in C#, darum trage ich mal alles zusammen, was ich an interessantem gefunden habe.

Erstmal auf ein Phänomen das ich oft treffe, SFTP und FTPS werden brachial durcheinandergeschmissen. Daher kurz:
SFTP - ein Paketbasiertes Protokoll das auf SSH aufsetzt
FTPS - ein Komandobasiertes Protokoll das auf FTP aufsetzt und einen SSL verschlüsselten Kanal verwendet

Weitere Infos gibt es übersichtlich hier: http://winscp.net/eng/docs/protocols#protocol_comparison
und hier: http://searchsecurity.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid14_gci1232457,00.html

Daraus ergeben sich 2 Umstände:
1. FTPS ist schneller als SFTP
2. Die FTP Beispiel Implementierung von Mircosoft funktioniert nicht für SFTP (es ist ein anderes Basis Protokoll!)

FTP sendet Daten (auch Passwörter) unverschlüsselt durchs Web zum Server, darum kann man mit FTPS eine SSL Verbindung etablieren, die diesen Verkehr verschlüsselt. Unter Unix is SSH etabliert und hier muss ich auf einen SFTP Server zugreifen. Doch dummerweise ist gerade SSH in .NET nicht implementiert von Microsoft.

Schnell will ich die Liste der kommerziellen Produkte abhaken, dazu hab ich zwei interessante Links gefunden:
- http://www.trilead.com/Products/Trilead-SSH/ (scheint aus JAVAs Ganymed hervorgegangen zu sein)
- http://www.eldos.com/sbb/sftpcompare.php (wobei dieser Vergleich mit etwas Vorsicht zu geniessen ist da schließlich Eldos sein Produkt besonders pushen möchte, dennoch ein erster Überblick und Startpunkt)

Nun was gibt es auf der Open Source Seite? Da sieht es ein wenig arg düster aus irgendwie:
- Granados - Der japanische Hersteller Routrek bietet eine Open Source Implementierung von SSH unter der liberalen Apache License zur Verfügung: http://www.routrek.co.jp/en/product/varaterm/granados.html
- SharpSsh - Der israelische Entwickler Tamir Gal hat einen Port von Jsch programmiert und stellt dies unter der ebenfalls liberalen BSD License zur Verfügung: http://www.tamirgal.com/home/dev.aspx?Item=SharpSsh
Dazu hat er noch einen Beitrag auf Codeproject verfasst.
- SharpSsh bedient sich dabei der GPL freien Kryptographie Libraries von Mentalis: http://www.mentalis.org/soft/projects/crypto/

Eine Recherche via Googles Codesearch endete darin, dass alle von mir gefundenen Implementierungen auf Tamir Gals Port aufsetzen.

SSH Testserver aufsetzen

Ich muss gerade einen SFTP/SCP Client coden und da mir der Kunde keinen Server zum testen für den Anfang zur Verfügung stellt, brauch ich einen auf die schnelle in meiner Entwicklungs VM.

Nach ein wenig googeln findet man sshwindows eine OpenSSH Umsetzung, diese Implementierung setzt auf den UNIX Emulator cygwin in abgespeckter Form auf (wer gcc verwendet dürfte den kennen) und hat vollen SSH(1+2)/SCP/SFTP Support. Der letzte Stand ist vom Juli/2004 und wird leider nicht mehr gewartet seit dem. Wer etwas mehr up-to-date benötigt kann sich auf OpenSSH nach einer aktuelleren Windows Implementierung umsehen.

sshwindows ist simpel in Installation und Konfiguration und reicht für meine einfachen Testzwecke aus (es dauert länger diesen Blogeintrag zu schreiben, als es zu konfigurieren...).

Die Installation ist straight forward, danach hat man im Startmenu (respektiver docs Unterverzeichnis) einen Quick Start Guide.

Hier nochmal kurz, für einen lokalen User (domain user ist fast identisch, siehe Quick Start Guide)
- Command Prompt öffnen
- In das bin Verzeichnis der OpenSSH Installation wechseln
- eingeben: "mkgroup -l >> ..\etc\group"
- eingeben (Beispiel Administrator User): "mkpasswd -l -u Administrator >> ..\etc\passwd"
- Server starten mit: "net start opensshd"

Für das starten hab ich mir eine kleine Batch Datei geschrieben:

   1:  :: change to the OpenSSH bin dir
   2:  @ECHO OFF
   3:   
   4:  CD C:\OpenSSH\bin
   5:   
   6:  ECHO.
   7:   
   8:  :: start SFTP
   9:  net start opensshd
  10:   
  11:  :END

Jetzt ist der lokale Administrator User als Login eingerichtet mit den Windows Credentials für unseren Test SFTP Server. Anmerkung: Um ihn nun zu verwenden mußte ich den Rechner erst neu starten, ansonsten scheiterte der Login mit einem Error!

Als Testclient hab ich FileZilla verwendet. Nach der Installation, einfach:
Host: localhost
User: Administrator
Password: <windows password>
Port: 22
eingeben und Quickconnect.

Jetzt liegt das FTP Verzeichnis noch etwas sehr hässlich im Home Verzeichnis des Administrators (also z.B. je nach verwendetem Windows: C:\Documents and Settings\Administrator\).

Das kann man auch sehr schnell und einfach anpassen:
Im Verzeichnis \etc liegt die Datei passwd. Im Texteditior findet man ziemlich nahe am Schluss den Eintrag: /home/Administrator den habe ich ersetzt durch z.B.: /cygdrive/c/FTPDir (cygdrive/c/ ist die Deklaration das Windows C:\ zu verwenden)