SSH Cipher wechseln – schneller Datentransfer mit weniger CPU-Last

Ich verwende gelegentlich meinen DD-WRT Router zum Download großer Daten aus dem Internet (so wie heute das neue Windows 8 Developer Image) um bei Downloadzeiten von mehreren Stunden diese in der Nacht, ohne laufenden PC durchführen zu können. Am DD-WRT hab ich dazu einen USB-Hub samt mehrerer 8GB USB-Sticks auf denen die Daten liegen. Weil ich zu faul bin einen lokalen FTP-Server oder einen Samba-Server auf dem Router aufzusetzen (und es den bereits knappen RAM noch mehr belasten würde), nutze ich meist SCP (aus mangeln eines voll-funktionsfähigen SFTP-Servers auf dem Router) um die Daten dann auf den lokalen PC zu transferieren. Ein Vorteil von SSH, die Verschlüsselung, bringt in diesem speziellen Fall allerdings einen großen Nachteil mit sich: der ohnehin nicht besonders schnelle Router (Broadcom BCM4785 CPU — 300 Mhz) wird durch die Encryption extrem ausgebremst. So pendelt sich die Datentransferrate mit den Defaultsettings bei ungefähr 400 KB/s ein (was im Vergleich zu meiner Internetanbindung mit 500 KB/s schon wirklich langsam ist). Leider gibt es keine Möglichkeit die Verschlüsselung komplett zu deaktivieren (wenn jemand doch eine kennt, bitte ich um Korrektur), aber man kann zumindest einen schnelleren Verschlüsselungsalgorithmus auswählen:

-c blowfish|3des|des
Selects the cipher to use for encrypting the session. 3des is used by default. It is believed to be secure. 3des (triple-des) is an encrypt-decrypt-encrypt triple with three different keys. blowfish is a fast block cipher, it appears very secure and is much faster than 3des des is only supported in the ssh client for interoperability with legacy protocol 1 implementations that do not support the 3des cipher. Its use is strongly discouraged due to cryptographic weaknesses.

Weil in diesem speziellen Fall die Verschlüsselung eigentlich komplett irrelevant ist, ist es auch komplett egal, wenn man einen unsicheren Cipher wählt. Mit dem blowfish Cipher pendelt sich die Datenrate bei mir bei immerhin 3 MB/s ein (um 750% schneller als mit dem 3des Cipher). Die Load des Routers steigt trotz dieses schnelleren Ciphers auf 2.5, es gäbe also noch Potenzial zur Verbesserung durch noch schnellere Verschlüsselungsverfahren (oder eben die komplette Deaktivierung).

  1. Ludwig sagt:

    Die Verschlüsselung abzustellen wäre an sich eine gute Idee… (einer bei ubuntuusers behauptet genau das zu können: http://forum.ubuntuusers.de/topic/ssh-verschluesselung-deaktivieren/?highlight=ltsp) Doch würde das bei einer „Secure Shell“ überhaupt Sinn machen? Du könntest dein Problem aber umgehen und den Ratschlag in ubuntuusers befolgen und gleich Telnet einsetzen. (sendet meines Erachtens alle Daten in Klartext)

  2. schneida sagt:

    Das Problem dabei ist, dass man dafür den SSHD-Server neukompilieren muss. Auf normaler Hardware kein Problem, allerdings ist das ganze mit einem ARM CPU auf integrierter Hardware nicht so einfach.
    Telnet ist leider auch keine Option, zumindest kenn ich kein einfaches Programm, mit dem ich über telnet auch Daten versenden kann (anstatt nur einzelne Befehle).

  3. Daria sagt:

    Also, du könntest ja netcat (nc), bei wikipedia sind paar coole beispiele da;
    oder du könntest ja fefes ncp nehmen, ist auch knorke.

    • schneida sagt:

      Danke für den Hinweis! Netcat kannte ich zwar, aber ncp hab ich bisher noch nie gesehn. Was du sagst stimmt ist aber für mich dennoch etwas komplizierter. Mit ncp muss ich, soweit ich das gesehen habe, auf beiden Rechner eingeloggt sein und npush bzw npoll starten während ich bei scp die Datei direkt ohne vorherigem Login kopieren kann. Außerdem kann ich weiterhin Programme wie unison nutzen um Dateien abzugleichen und einfach mit „-sshargs“ etwa die Verschlüsselung vereinfachen.

  4. Daria sagt:

    so weit ich es weiß, macht scp ja nichts anderes, als sich erst auf den router einlogen. und dann den transfes zu machen.

    um der verschlüßelung zu entkommen, könntest du ja mit ssh direkt auf den Router netcat oder ncp starten. es sieht nur nach dem ersten blick nach mehr gefrikel aus, ist es aber nicht. denn du könntest es ja dir leicht machen indem du auch eine bashfunkion oder script schreibst, etwa so:
    ———————————————-
    #!/bin/bash
    ssh -f „$1“ „bin/npush $2“
    sleep 5 # sleep verhindert, dass npoll vor npush ausgeführt wird, mit dem wert solltest du spielen.
    npoll „$1“;
    exit 0;
    ———————————————-

    benutzung: script ip-des-routers datei-zum-runterziehen

    • schneida sagt:

      Hallo Daria,

      natürlich muss man sich auch mit scp einloggen, aber das ganze geht automatisch und man muss sich nicht manuelle einloggen um den netcat zu starten. Aber wie du auch weiterschreibst kann man das mit einem Script lösen und wenn man das von dir gepostete Script noch etwas erweitert kann man sicherlich auch eine bessere Syntax etablieren um Dateien vom und zum Computer zu übertragen. Generell finde ich aber, ist der Aufwand das Script zu schreiben, es auf allen Computern mit denen man derartige Transfers machen will zu installieren um einiges größer ist, als einfach den gewohnten scp Befehl mit dem Parameter -c blowfish aufzurufen.

      Hab netcat dennoch ausprobiert, zwar nicht mit dem Router im Artikel da es dort kein funktionierendes netcat Programm im Standard-Repository gibt, sondern mit einer anderen relativ leistungsschwachen Maschine. Das Resultat, netcat ist exakt doppelt so schnell wie SSH und um 27% schneller als SSH mit Blowfish. Wer also wirklich große Dateien überträgt oder sehr oft Dateien über schnelle Leitungen aber mit langsamen Computern kopiert, der wird mit netcat wirklich ausgezeichnet beraten sein. Wer aber weiterhin die Flexibilität von SSH wünscht, der sollte die etwas größeren Transferzeiten in Kauf nehmen und bei SSH bleiben.

      Transferzeiten einiger Methoden im Vergleich

      PS: Das Javascript der Kommentarfunktion spinnt gerade etwas, werd ich mir anschauen!

  5. Daria sagt:

    irgendwie habe ich an falscher stelle geantwortet :)

  6. demonkoryu sagt:

    Du könntest auch die HPN-Erweiterungen nutzen: http://www.psc.edu/index.php/hpn-ssh
    und dann cipher = none.

  1. Es gibt noch keine Trackbacks für diesen Post!