Skip to content

Ein ssh-agent unter Cygwin ...

Vielleicht kann das einer von Euch auch gebrauchen.

# Start only one ssh-agent
if [[ -f ${HOME}/.ssh-agent ]]
then
        . ${HOME}/.ssh-agent > /dev/null
fi
if [ -z "${SSH_AGENT_PID}" -o -z "$(ps -a | awk "\$1 == ${SSH_AGENT_PID} {print ${SSH_AGENT_PID}}")" ]
then
        /usr/bin/ssh-agent > ${HOME}/.ssh-agent
        . ${HOME}/.ssh-agent > /dev/null

        ssh-add
fi

SFTP chroot mit Bordmitteln ...

linux Nachdem ich ein bisschen mit scponly und scponly-full wie auch rssh herumgespielt habe, habe ich mich entschieden, den Dateizugriff mit Bordmitteln unter Linux zu bewerkstelligen. Mir haben die anderen Lösungen nicht gefallen.

In Anlehnung an scponly habe ich eine Gruppe sftponly angelegt. In diese habe ich alle User gesteckt, die nur per sftp auf den Server zugreifen sollen.

In der /etc/ssh/sshd_config habe ich die betehende Subsystem-Zeile auskommentiert und eine neue Zeile mit Hinweis auf internal-sftp hinzugefügt.
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Ene chroot-Umgebung für die Gruppenmitglieder der Gruppe sftponly wird wie folgt eingerichtet:
Match group sftponly
        ChrootDirectory /home/%u
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp


Die ChrootDirectory-Option sagt, dass /home/USERNAME für den Benutzer zum root-Directory wird. Das Homeverzeichnis in der /etc/passwd gilt ab diesem Verzeichnis.

Das kann nervig sein, da im Standard, OpenSSH nach der authorized_keys-Datei im Verzeichnis .ssh des Homeverzeichnisses sucht. Das ist natürlich konfigurierbar, aber ich wollte daran nichts ändern.
AuthorizedKeysFile     %h/.ssh/authorized_keys


Daher sieht bei mir das Konstrukt ein wenig "eigenwillig" aus.

Unter /home/USERNAME/.ssh/authorized_keys sind die erlaubten öffentlichen Schlüssel des Benutzers zu finden. Das Verzeichnis /home/USERNAME gehört jetzt dem User root. Das Verzeichnis, in das der User schreiben darf liegt unter /home/USERNAME/home/USERNAME. Sieht komisch aus, macht aber nichts kaputt. :-)

Cipher noch einmal ...

Auf Nachfrage von Alex in den Kommentaren dieses Artikels, habe ich den Test auch noch mit Localhost gemacht.

Mit diesem Skript:
#!/bin/bash

for cipher in 3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour blowfish-cbc cast128-cbc
do
        echo ${cipher}
        for i in {1..3}
        do
                dd if=/srv/iso/ubuntu-10.04.1-server-i386.iso 2>/dev/null | ssh -o "Ciphers ${cipher}" localhost dd of=/dev/null 2>&1 | tail -1
        done
        echo
done

Der beste mittlere Wert ist wieder hervorgehoben:

3des-cbc
705077248 bytes (705 MB) copied, 43.7986 s, 16.1 MB/s
705077248 bytes (705 MB) copied, 46.7042 s, 15.1 MB/s
705077248 bytes (705 MB) copied, 43.7314 s, 16.1 MB/s

aes128-cbc
705077248 bytes (705 MB) copied, 9.3959 s, 75.0 MB/s
705077248 bytes (705 MB) copied, 9.46145 s, 74.5 MB/s
705077248 bytes (705 MB) copied, 9.94794 s, 70.9 MB/s

aes192-cbc
705077248 bytes (705 MB) copied, 10.3159 s, 68.3 MB/s
705077248 bytes (705 MB) copied, 10.6935 s, 65.9 MB/s
705077248 bytes (705 MB) copied, 10.9322 s, 64.5 MB/s

aes256-cbc
705077248 bytes (705 MB) copied, 11.2965 s, 62.4 MB/s
705077248 bytes (705 MB) copied, 11.8836 s, 59.3 MB/s
705077248 bytes (705 MB) copied, 11.4744 s, 61.4 MB/s

aes128-ctr
705077248 bytes (705 MB) copied, 13.4396 s, 52.5 MB/s
705077248 bytes (705 MB) copied, 13.4175 s, 52.5 MB/s
705077248 bytes (705 MB) copied, 12.8931 s, 54.7 MB/s

aes192-ctr
705077248 bytes (705 MB) copied, 16.1927 s, 43.5 MB/s
705077248 bytes (705 MB) copied, 13.1323 s, 53.7 MB/s
705077248 bytes (705 MB) copied, 15.8256 s, 44.6 MB/s

aes256-ctr
705077248 bytes (705 MB) copied, 15.2297 s, 46.3 MB/s
705077248 bytes (705 MB) copied, 17.889 s, 39.4 MB/s
705077248 bytes (705 MB) copied, 18.0179 s, 39.1 MB/s

arcfour128
705077248 bytes (705 MB) copied, 7.51314 s, 93.8 MB/s
705077248 bytes (705 MB) copied, 7.46925 s, 94.4 MB/s
705077248 bytes (705 MB) copied, 7.40912 s, 95.2 MB/s

arcfour256
705077248 bytes (705 MB) copied, 7.43831 s, 94.8 MB/s
705077248 bytes (705 MB) copied, 7.47133 s, 94.4 MB/s
705077248 bytes (705 MB) copied, 7.52313 s, 93.7 MB/s

arcfour
705077248 bytes (705 MB) copied, 7.16657 s, 98.4 MB/s
705077248 bytes (705 MB) copied, 7.33755 s, 96.1 MB/s
705077248 bytes (705 MB) copied, 7.10961 s, 99.2 MB/s

blowfish-cbc
705077248 bytes (705 MB) copied, 14.8319 s, 47.5 MB/s
705077248 bytes (705 MB) copied, 18.36 s, 38.4 MB/s
705077248 bytes (705 MB) copied, 15.9737 s, 44.1 MB/s

cast128-cbc
705077248 bytes (705 MB) copied, 21.3008 s, 33.1 MB/s
705077248 bytes (705 MB) copied, 25.2206 s, 28.0 MB/s
705077248 bytes (705 MB) copied, 19.5291 s, 36.1 MB/s


Und, was sagt das ganze nun?

Es gibt nicht den einen perfekten Cipher-Algorithmus, manche Cipher verlangen viel Power auf dem Server, andere viel Power auf dem Client. Man muss je nach Anwendungsgebiet den richtigen auswählen.

Cipher-Wahl für SSH-Kopieraktionen ...

Durch die geschickte Wahl der Cipher Suite bei Kopieraktionen über die SSH kann man sehr viel Transferzeit sparen.

Ich habe das einmal mit einem kleinen Skript getestet. Der Test wurde in einem 100 MBit/s-Netz gemacht. Sender und Empfänger hingen am gleichen Switch.
#!/bin/bash

for cipher in 3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour blowfish-cbc cast128-cbc
do
    echo ${cipher}
    for i in {1..3}
    do
        scp -c ${cipher} stardust-lan:/srv/iso/ubuntu-10.04.1-server-i386.iso .
        rm *.iso
    done
    echo
done

Das führte zu diesem Resultat, die Kopieraktion, bei der der mittlere Wert am besten ist, habe ich fett markiert:

3des-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.0MB/s 01:36
ubuntu-10.04.1-server-i386.iso 100% 672MB 6.7MB/s 01:41
ubuntu-10.04.1-server-i386.iso 100% 672MB 6.7MB/s 01:40

aes128-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24

aes192-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.6MB/s 01:29
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.3MB/s 01:21

aes256-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.9MB/s 01:08
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.3MB/s 01:05

aes128-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.9MB/s 01:25
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.1MB/s 01:23
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.1MB/s 01:23

aes192-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.2MB/s 01:00
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03

aes256-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.1MB/s 01:14
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.2MB/s 01:06
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03

arcfour128
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.3MB/s 01:12
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.2MB/s 01:13
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.3MB/s 01:12

arcfour256
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.2MB/s 01:00
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.9MB/s 01:02

arcfour
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.2MB/s 01:06

blowfish-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.1MB/s 01:14
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.2MB/s 01:13
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.9MB/s 01:16

cast128-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.3MB/s 01:21
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.4MB/s 01:20
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.6MB/s 01:18


66% Differenz in der Zeit im Extremen ist ein guter Grund, sich darüber Gedanken zu machen. Bei Kopieraktionen über das Internet lohnt sich zusätzlich noch, die Kompression einzuschalten.

Wichtig: Das sagt nur etwas über Übertragungszeiten und nicht über die Qualität der Ciphers aus!

Anwendung ("-C" oder "Compression yes" nur bei langsamen Netzwerken):
scp -c aes192-ctr -C quelle host:/ziel
rsync -avze 'ssh -o "Ciphers aes192-ctr" -o "Compression yes"' quelle/ host:/ziel/

Oder gleich als Eintrag in die ~/.ssh/config:
Host *
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour
Compression yes


Achtung: In der Config sollte man direkt mehrere Ciphers in Reihenfolge der eigenen Präferenzen eintragen, es kann sein, dass ein entferntes System eine bestimmte Cipher nicht beherrscht.