In meiner Netzwerkfestplatte werkelt ein kleiner ARM-Prozessor Feroceon 88FR131 unter Debian. Er ist schnell genug für eine Shell und eine kleine Web-Oberfläche, aber zu langsam für moderne Crypto über große Datenmengen. Der SSH-Server bietet dem Client eine große Auswahl Algorithmen zur Kommunikation an und verständigt sich dann meist auf den zuverlässigsten. Bei mir blieben noch 5,6MB/s übrig, was mir definitiv zu langsam ist.
Also erstellte ich eine 400MB große Testdatei und kopierte sie mit verschiedenen Ciphern immer wieder übers Netzwerk.
$ scp -c aes256-cbc testfile 192.168.1.20:~
testfile 100% 401MB 5.1MB/s 01:19
Cipher | Datendurchsatz |
---|---|
3des-cbc | 2.5MB/s |
aes128-ctr | 6.1MB/s |
aes192-ctr | 5.4MB/s |
aes256-ctr | 5.0MB/s |
arcfour128 | 11.1MB/s |
blowfish-cbc | 8.9MB/s |
aes128-cbc | 6.0MB/s |
aes192-cbc | 5.6MB/s |
aes256-cbc | 5.1MB/s |
arcfour | 11.1MB/s |
arcfour256 | 11.1MB/s |
cast128-cbc | 8.4MB/s |
Mehr als 11.1MB/s schafft das 100Mbit-Ethernet nicht. Da auch viele kleine Dateien schnell kopiert werden müssen, habe ich ein Verzeichnis mit 282 JPG-Bildern mit insgesamt 38,6MB angelegt. Beim Kopieren wurde wieder die Zeit gemessen. Mit dem voreingestellten Algorithmus dauerte es 7,4 Sekunden.
$ START=$(date +%s.%N)
&& scp -c blowfish-cbc -q test/* 192.168.1.20:~/test
&& END=$(date +%s.%N)
&& DIFF=$(echo "$END - $START" | bc)
&& echo $DIFF
5.343504576
Cipher | 282 Dateien 40MB | 2256 Dateien 300MB |
---|---|---|
aes128-ctr | 7.4s | 64s |
arcfour128 | 4.4s | 39s |
blowfish-cbc | 5.3s | 47s |
arcfour | 4.4s | 40s |
arcfour256 | 4.8s | 40s |
cast128-cbc | 5.6s | 46s |
Es sieht also so aus, als würden Blowfish, Arcfour und Cast das Rennen machen. Bei Arcfour sollte man arcfour256 bevorzugen. Dagegen scheint cast128 für nichts gut zu sein. Der Standard für schnelles SSH ist wohl Blowfish.
Um den Server auf Arcfour zu beschränken habe ich in der /etc/ssh/sshd_config folgende Zeile angehängt:
Ciphers arcfour256
Nach einem Neustart des SSH-Servers beträgt der Datendurchsatz statt 5.6MB/s nun 9.7MB/s. Mein Client-Notebook ist dabei nur zu wenigen Prozent ausgelastet, der Server zu 100%.
Das Einbinden der Netzwerkfestplatte geschieht übrigens nicht über Gnomes langsames und anfälliges gvfs, sondern auf Dateisystem-Ebene mit sshfs.
well done, fyi:
– arcfour is also known as RC4
– blowfish seems to be insecure
https://tools.ietf.org/html/rfc7465
https://www.openssh.com/txt/release-7.4
https://www.schneier.com/blowfish-bug.txt
on mount with sshfs try to use:
compression=no
cache=yes and kernel_cache
perhaps large_read
Thanks a lot!
It still seems to be difficult if you have
1) a lot of traffic
2) a small CPU
3) an insecure connection
as SSH needs some calculation power.