SSH Tipps & Tricks

Axel "XTaran" Beckert

Debian / CCCZH / Hackerfunk

axel@beckert.ch
https://axel.beckert.ch/

Einleitung und Ziele

  • Nicht Grundlagen, sondern das Drumherum
  • Möglichkeiten aufzeigen, nicht zuviel Details
  • Kompatibilität:
    • Sollte alles gehen mit OpenSSH 4.3 (wo nicht anders erwähnt, getestet mit 5.1)
    • Das meiste geht auch mit älteren OpenSSH-Versionen
    • Vieles geht auch mit anderen Implementationen
    • Aktuell: 8.0 / 8.0p1
    • Debian 10 Buster: 7.9p1

Übersicht

  • Neues in OpenSSH 7.7 bis 8.0
  • Drumherum
    • Nette Tools drumherum
    • Alternative SSH-Server
    • SSH ist nicht nur Unix-Sache
  • Bordmittel
    • Hostkeys verifizieren
    • Das Leben mit Bordmitteln leichter machen
    • Tunneln ist nicht böse, sondern wichtig
    • Ich bin drin! Und jetzt?
    • Verbindungen im Vornhinein kastrieren
  • Links und Abschluss

Neues in OpenSSH 8.0 (18. April 2019)

  • Feature-Release und internes Refactoring
  • Entschärfung einer Schwachstelle im `scp` Programm und Protkoll (CVE-2019-6111).
  • host/port-Syntax (für IPv6 gedacht) wurde entfernt. Es gibt die [2001:db8::1]:22-Syntax und 2001:db8::1/22 sieht eher nach CIDR-Notation aus.
  • Experimentelle quantenrechner-resistente Schlüsselaustausch-Methoden basierend auf einer Kombination aus Streamlined NTRU Prime 4591^761 und X25519.
  • Default-RSA-Schlüsselgrösse auf 3072 angehoben.
  • Option -J (ProxyJump) auch bei scp und sftp.
  • https://www.openssh.com/txt/release-8.0

Sonstige in letzter Zeit eingeführten Featuresx

  • OpenSSH ≥ 7.9: Portnummern können auch durch Servicename (z.B. via /etc/services) angegeben werden.
  • OpenSSH ≥ 7.8: ssh-keygen schreibt private Schlüssel per Default im OpenSSH-eigenen Format, unterstützt von allen OpenSSH-Versionen seit 2014.
  • OpenSSH ≥ 7.8: PermitListen-Direktive für authorized_keys.
  • OpenSSH ≥ 7.7: Experimentelle Unterstützung für Post-Quantum-Cryptography XMSS-Schlüssel (Extended Hash-Based Signatures) basierend auf dem Algorithmus beschrieben in draft-irtf-cfrg-xmss-hash-based-signatures-12 (Nicht per Default einkompiliert.)
  • OpenSSH ≥ 7.7: Entfernte Unterstützung für SSH-Implementationen vor 2001 bzw. vor den SSH-RFCs (ssh.com ≤ 2.x; OpenSSH ≤ 3.x).

Nette Tools drumherum (1/7): screen + tmux

GNU Screen bzw. Tmux erlauben u.a. Shells und andere Text-Modus-Programme (z.B. mutt, irssi, mcabber) auf anderen Rechnern weiterlaufen zu lassen ohne die ssh-Verbindung dorthin permanent offen zu halten.

  • Starten: screen
  • Programm im Screen starten: screen irssi
  • Abhängen (Detach): <Ctrl-A><Ctrl-D>
  • Wieder zu Session verbinden: screen -r
  • Verbinden, andere Verbindung abbrechen: screen -r -d
  • Verbinden ohne andere Verbindung abzubrechen: screen -x
  • tmux ist moderner, bunter, leicht anders, kann tlw. mehr, tlw. weniger

Nette Tools drumherum (2/7): autossh

  • Testet über SSH-Tunnel die Verfügbarkeit der Verbindung und startet die SSH-Verbindung bei Bedarf neu.
  • Ideal zusammen mit Screen
  • autossh -t rechner 'screen -RD' und man hat seine Shell wieder, sobald die Verbindung wieder steht.

Nette Tools drumherum (3/7): mosh

  • SSH-Alternative bei hoher Latenz oder viel Paketverlust.
  • mosh-server muss auf Server-Seite installiert sein.
  • Kein offener Port wenn ungenutzt
  • Nutzt ssh zur Authentifizierung, Autorisierung und zum Starten des Servers.
  • Nutzt per Default UDP Ports 60000 bis 61000.
  • Braucht kein "Detach" — Server wartet einfach, bis Verbindung wieder da ist.
  • Unterstützt ausschliesslich UTF-8.
  • Wechsel zwischen IPv4 und IPv6 innerhalb einer Session (noch) nicht möglich.

Nette Tools drumherum (4/7): sshfs

  • Mountet Verzeichnisse von per SSH erreichbaren Rechnern mittels FUSE.
  • Nutzt das SFTP-Subsystem auf dem Remote-Rechner.
  • sshfs rechner:/home/meinkonto home-auf-rechner
    cd home-auf-rechner

Nette Tools drumherum (5/7): sslh

  • Erlaubt, auf Port 443 (HTTPS) sowohl HTTPS als auch SSH zu nutzen.
  • Erkennt das Protokoll und leitet die Verbindung an den richtigen Dienst (HTTPS dann meist auf Port 442) weiter.
  • Hilft gegen Firewalls, die SSH verbieten, aber HTTPS erlauben.

Nette Tools drumherum (6/7): ssh-tools

  • ssh-diff: Diff zwischen einer lokalen Datei und einer Datei auf einem SSH-Server.
  • ssh-facts: Loggt remote ein, sammelt Metadaten und gibt sie maschinen-lesbar aus.
  • ssh-hostkeys: Zeigt alle Hostkey-Fingerprints (eines Servers) mit SHA256 und MD5
  • ssh-ping: Ping auf den SSH-Port 22
  • ssh-version: Zeigt SSH-Banner eines Servers an

Nette Tools drumherum (7/7): ssh-audit

ssh-audit: Zeigt alle möglichen Metadaten eines SSH-Servers an und bewertet sie.

$ ssh-audit somehost
# general
(gen) banner: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u6
(gen) software: OpenSSH 7.4p1
(gen) compatibility: OpenSSH 7.3+, Dropbear SSH 2016.73+
(gen) compression: enabled (zlib@openssh.com)

# key exchange algorithms
(kex) curve25519-sha256                     -- [warn] unknown algorithm
(kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.5, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp256                    -- [fail] using weak elliptic curves
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp384                    -- [fail] using weak elliptic curves
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp521                    -- [fail] using weak elliptic curves
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) diffie-hellman-group-exchange-sha256  -- [warn] using custom size modulus (possibly weak)
                                            `- [info] available since OpenSSH 4.4
(kex) diffie-hellman-group16-sha512         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) diffie-hellman-group18-sha512         -- [info] available since OpenSSH 7.3
(kex) diffie-hellman-group14-sha256         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) diffie-hellman-group14-sha1           -- [warn] using weak hashing algorithm
                                            `- [info] available since OpenSSH 3.9, Dropbear SSH 0.53

# host-key algorithms
(key) ssh-rsa                               -- [info] available since OpenSSH 2.5.0, Dropbear SSH 0.28
(key) rsa-sha2-512                          -- [info] available since OpenSSH 7.2
(key) rsa-sha2-256                          -- [info] available since OpenSSH 7.2
(key) ecdsa-sha2-nistp256                   -- [fail] using weak elliptic curves
                                            `- [warn] using weak random number generator could reveal the key
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(key) ssh-ed25519                           -- [info] available since OpenSSH 6.5

# encryption algorithms (ciphers)
(enc) chacha20-poly1305@openssh.com         -- [info] available since OpenSSH 6.5
                                            `- [info] default cipher since OpenSSH 6.9.
(enc) aes128-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes192-ctr                            -- [info] available since OpenSSH 3.7
(enc) aes256-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes128-gcm@openssh.com                -- [info] available since OpenSSH 6.2
(enc) aes256-gcm@openssh.com                -- [info] available since OpenSSH 6.2

# message authentication code algorithms
(mac) umac-64-etm@openssh.com               -- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 6.2
(mac) umac-128-etm@openssh.com              -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-512-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha1-etm@openssh.com             -- [warn] using weak hashing algorithm
                                            `- [info] available since OpenSSH 6.2
(mac) umac-64@openssh.com                   -- [warn] using encrypt-and-MAC mode
                                            `- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 4.7
(mac) umac-128@openssh.com                  -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha2-512                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha1                             -- [warn] using encrypt-and-MAC mode
                                            `- [warn] using weak hashing algorithm
                                            `- [info] available since OpenSSH 2.1.0, Dropbear SSH 0.28

# algorithm recommendations (for OpenSSH 7.4)
(rec) -diffie-hellman-group14-sha1          -- kex algorithm to remove 
(rec) -diffie-hellman-group-exchange-sha256 -- kex algorithm to remove 
(rec) -ecdh-sha2-nistp256                   -- kex algorithm to remove 
(rec) -ecdh-sha2-nistp384                   -- kex algorithm to remove 
(rec) -ecdh-sha2-nistp521                   -- kex algorithm to remove 
(rec) -ecdsa-sha2-nistp256                  -- key algorithm to remove 
(rec) -hmac-sha1                            -- mac algorithm to remove 
(rec) -hmac-sha2-256                        -- mac algorithm to remove 
(rec) -hmac-sha2-512                        -- mac algorithm to remove 
(rec) -umac-64@openssh.com                  -- mac algorithm to remove 
(rec) -umac-128@openssh.com                 -- mac algorithm to remove 
(rec) -hmac-sha1-etm@openssh.com            -- mac algorithm to remove 
(rec) -umac-64-etm@openssh.com              -- mac algorithm to remove 
    

Alternative SSH-Server

  • Dropbear
    • Kompakter SSH-Server, der die meistgebrauchten Features von SSHv2 implementiert.
    • Unterstützt X11- und Agent-Forwarding.
  • LSH-Server (lshd)
    • Unter GPL
  • TinySSH
    • Minimalistischer SSH-Server, der nur eine Untermenge von SSHv2 implementiert.
    • Keine Abhängigkeit von OpenSSL.
    • Unterstützt nur ED25519, Curve25519(X25519) und CHACHA20POLY1305 (Post-Quantum-Kryptografie).
    • Implementiert nur Public-Key-Authentifizierung. (Passwort- und hostbasierte Authentifizierung sind nicht implementiert.)

SSH ist nicht nur Unix-Sache

  • Unter Windows:
    • Cygwin: POSIX-Umgebung für Windows inkl. OpenSSH (Client+Server)
    • Putty: Freier SSH-Client für u.a. Windows
    • KiTTY: Putty-Fork, mehr Features, nur für Windows
    • MobaXterm: Terminal, SSH-Client und X-Server in einem (GPL, aber Freemium-Prinzip)
    • WinSCP: Drag & Drop SCP, baut auf Putty auf.
  • dropbear: Freie SSH-Implementation (Client+Server) für Embeddedsysteme (inkl. iPhone, AppleTV, Dreambox, viele NAS und Router)
  • PSPSSH: Freier SSH-Client für die Sony PSP, baut auf dropbear auf
  • MidpSSH: Freier SSH-Client für MIDP/J2ME-fähige Mobiltelefone
  • S2Putty: Freier SSH-Client für Symbian S60 Mobiltelefone
  • ConnectBot: SSH-Client für Android

Bordmittel (1/9): SSH-Host-Schlüssel (1/2)

Identität eines SSH-Servers mit SSH-Host-Keys verifizieren

  • Public-Key-Kryptographie
  • RFC 4255 (2006, Draft von 2003)
  • ssh-keygen -l -f /etc/ssh/ssh_host_<algorithmus>_key.pub (fügt .pub automatisch hinzu, falls weggelassen):
    $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key
    256 fd:89:37:8e:f0:76:f0:c9:47:ee:73:31:0f:48:fe:20  root@c-cactus (ECDSA)
  • GET https://db.debian.org/debian_known_hosts > ~/.ssh/known_hosts2 (Neben ~/.ssh/known_hosts wird per Default auch in ~/.ssh/known_hosts2 geschaut. Wie praktisch! ;-)
  • Beinahe Bordmittel: openssh-known-hosts:
    PLUGIN=curl
    EXIT_IGNORE='6 7 28'
    
    URL='https://db.debian.org/debian_known_hosts'
;

Bordmittel (2/9): SSH-Host-Schlüssel (2/2)

SSH-Host-Keys per DNS verifizieren — DNSSEC empfohlen

  • ssh-keygen -r <hostname>:
    $ ssh-keygen -r c-cactus.deuxchevaux.org
    c-cactus.deuxchevaux.org IN SSHFP 1 1 8270d67451d29af5b2cc3d0a00c2df20060746fa
    c-cactus.deuxchevaux.org IN SSHFP 1 2 7683a04bbd2dbbae9c6d487493c251de69100287e09fa6c72d7d74555c8a4912
    c-cactus.deuxchevaux.org IN SSHFP 2 1 f43b0e9d2367bf6cd47fb405288d7304a10a41d9
    c-cactus.deuxchevaux.org IN SSHFP 2 2 0e6b6d17e1565ec05d9c400abda79eae935e44b6a1faa22d20083d38c517f7b9
    c-cactus.deuxchevaux.org IN SSHFP 3 1 2de9449a6917145f0839a5b6d41c30cb2685bb1d
    c-cactus.deuxchevaux.org IN SSHFP 3 2 8a459888de5d7ed2c6d88be79282038fe2cde417e34fc9655fdb4fc91a249b46
  • host -t SSHFP <hostname>:
    $ host -t SSHFP www.ccczh.ch
    www.ccczh.ch is an alias for proxy.ccczh.ch.
    proxy.ccczh.ch has SSHFP record 3 1 CC60D7A88E96BDAD570EAA39CDC86FED
    proxy.ccczh.ch has SSHFP record 1 1 9BA56C02A0A82E2BED5D946413E6A62B
    proxy.ccczh.ch has SSHFP record 2 1 99C0844B0A0692EEC6601B5ACBDC81D5
  • ssh -o "VerifyHostKeyDNS ask" <hostname>:
    $ ssh -o "VerifyHostKeyDNS ask" host.example.com
    […]
    Matching host key fingerprint found in DNS.
    Are you sure you want to continue connecting (yes/no)?

Bordmittel (3/9): SSH-Schlüssel und SSH-Agent

Mit SSH-Schlüsseln arbeiten

  • Public-Key-Kryptographie
  • ssh-keygen (Nur in Ausnahmen ohne Passphrase!)
  • ssh-copy-id (schreibt Key(s) in ~/.ssh/authorized_keys remote)
  • eval `ssh-agent` (Kann auch durch Xsession gestartet worden sein.)
  • ssh-add
  • ssh-add -l (List fingerprints) / ssh-add -L (List public key parameters)
  • ssh anderer.rechner -t -A ssh-add (Schlüssel von anderem Rechner in den Key-Agent laden.)

Beinahe Bordmittel (4/9): Alternative SSH-Agents

  • GnuPG Agent (gpg-agent)
  • GNOME Keyring
  • KWallet via kwalletcli, kwalletaskpass und gpg-agent

Bordmittel (5/9): Mit dem SSH-Agent arbeiten

  • ssh-add -x (Lock)
  • ssh-add -X (Unlock)
  • ssh -A (Forward Agent)
  • ssh -a (Don't forward Agent)
  • Host *.deuxchevaux.org *.noone.org
      ForwardAgent yes

Bordmittel (6/9): SFTP, SCP

Dateien mit SSH übertragen

  • $ scp datei meinkonto@rechner:verzeichnis/
    datei                            100%  337     0.3KB/s    00:00

    (Zielpfad auf Remote-Rechner relativ zu $HOME oder Chroot)
  • $ sftp meinkonto@rechner
    Connecting to rechner...
    sftp> ls
    datei1 datei2
    sftp> get datei1
    Fetching /home/meinkonto/datei1 to datei1
    /home/abe/datei1                      100%  337     0.3KB/s   00:00
    sftp> lls
    datei1 datei3
    sftp> put datei3
    Uploading datei3 to /home/meinkonto/datei3
    datei3                                100%   65     0.1KB/s   00:00
    sftp> quit

Bordmittel (7/9): SSH-Konfigurationsdatei

$EDITOR ~/.ssh/config

Host *
        HashKnownHosts no
        NoHostAuthenticationForLocalhost yes

Host sym
        HostName symlink.to.noone.org
        ForwardAgent yes
        ForwardX11Trusted yes

Host sf
        Hostname shell.sourceforge.net
        User xtaran

Host avaya
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null

Bordmittel (8/9): Proxy{Command,Jump}

$EDITOR ~/.ssh/config

# OpenSSH < 5.4
Host myhomeserver
        ProxyCommand ssh myhomegateway nc myhomeserver 22

# OpenSSH ≥ 5.4
Host myhomeserver
        ProxyCommand ssh myhomegateway -W myhomeserver:22

# OpenSSH ≥ 7.3
Host myhomeserver
        ProxyJump myhomegateway

ssh -J company-jumphost,team-jumphost server (OpenSSH ≥ 7.3)

Bordmittel (9/9): ControlMaster

$EDITOR ~/.ssh/config

Host host-with-picky-firewall
        ControlMaster autoask
        ControlPath ~/.ssh-master-%l-%h-%p-%r

Tunneln (1/6): Übersicht

  • Tunneln ist nicht böse sondern dient der eigenen Sicherheit und Privatsphäre (Hallo liebe NSA! *blblblbl* :-P)
  • Aufpassen bei Tunnels in nicht-vertrauenswürdige Länder (z.B. vom Staat "gefälschte" SSL-Zertifikate)
  • Anwendungen, die ssh selbst aufrufen
  • X-Anwendungen tunneln ("DISPLAY Forward")
  • Einzelne Verbindungen tunneln
  • ssh als SOCKS-Proxy
  • ssh als "VPN für Arme"

Tunneln (2/6): Anwendungen, die ssh nutzen

  • Rufen original meist die unverschlüsselte rsh auf.
  • rsh oft symbolischer Link auf ssh falls rsh nicht installiert
  • rsync -e ssh
  • "Pre-Authenticated IMAP" (braucht SSH-Keys)
    • mutt (.muttrc: set tunnel="ssh -q imap.example.org /etc/rimapd")
    • pine (.pinerc)
      inbox-path={imap.example.org/user=meinkonto/secure}INBOX
      folder-collections=Mail {imap.example.org/user=meinkonto/secure}[]
      rsh-open-timeout=0
      ssh-path=/usr/bin/ssh
    • Funktioniert mindestens mit UW IMAPd und Dovecot.
  • Viele Versionskontrollsysteme unterstützen ssh "out of the box": cvs (CVS_RSH=ssh), svn (svn+ssh://…), git, hg, etc.

Tunneln (3/6): X-Anwendungen tunneln

  • "Weiterleitung" von X-Anwendungen normal unverschlüsselt
  • ssh kann automatisch den passenden Tunnel einrichten und $DISPLAY passend setzen. Braucht xauth remote im Suchpfad.
  • -X oder ForwardX11 yes
  • -Y oder ForwardX11 yes + ForwardX11Trusted yes (Details in ssh_config(5))
  • -x oder ForwardX11 no

Tunneln (4/6): Einzelne Ports tunneln

  • Ein Zugriff auf einen lokalen "Port" wird auf einen anderen Port hinter dem Remote-Rechner weitergeleitet (oder umgekehrt)
  • Weitergeleitete Ports per Default nur von "localhost" erreichbar. -g zu freischalten des Zugriffs von überall.
  • ssh -L 8080:proxy:8080 heimrouter (Proxy zuhause von aussen nutzen)
  • ssh -R 8000:localhost:8001 firmenrechner (Firmenrechner Zugriff auf lokalen Webserver geben)
  • ssh -R 8000:localhost:8001 -g firmenrechner (Allen Firmenrechnern Zugriff auf lokalen Webserver geben)

Tunneln (5/6): SOCKS-Proxy

ssh als SOCKS-Proxy nutzen

  • ssh -D 1080 rechner und localhost:1080 als SOCKS-Proxy in Browser, E-Mail-Programm, sonstigem Programm oder mit tsocks angeben
  • Alle TCP-Verbindungen des Programms scheinen dann von "rechner" aus zu kommen.
  • Achtung: DNS-Anfragen (normalerweise UDP) werden per Default nicht getunnelt, ab Protokoll SOCKS4a möglich.

Tunneln (6/6): VPN für Arme

  • OpenSSH ab Version 4.3 kann auch sog. "tun/tap Devices" für das Tunneln kompletter Netzwerkverbindungen anlegen.
  • Tunnelt auch UDP und damit DNS.
  • Ist langsam, weil "IP over TCP"
  • Braucht root-Rechte auf beiden Seiten.
  • Routing-Tabellen müssen manuell oder mit Skripten angepasst werden.

Ich bin drin! Und jetzt?

  • Nach <Enter>~ passiert nix?
  • Eine Tilde nach einem Enter ist die Escape-Zeichenkombination der SSH
  • ~~ ergibt eine Tilde
  • ~. beendet die Verbindung sofort
  • ~<Ctrl-Z> stoppt die SSH (Wieder weiterlaufen lassen: fg)
  • ~& schiebt die SSH in den Hintergrund nach Ausloggen falls noch Tunnel genutzt werden.
  • ~? zeigt die Hilfe

Verbindungen kastrieren

  • Oft will man nur Zugang zu einem Programm geben.
  • Per Web ist aufwendig, kompliziert und fehleranfällig.
  • command="blafasel" ssh-rsa AAAAB3Nza… führt bei jedem Login mit diesem Schlüssel "blafasel" aus
  • from="rechner" ssh-rsa AAAAB3Nza… erlaubt Zugriff mit diesem Schlüssel nur von "rechner" aus.
  • no-{agent,port,X11}-forwarding ssh-rsa AAAAB3Nza… verbietet diverses Weiterleiten.
  • no-pty ssh-rsa AAAAB3Nza… verbietet Pseudo-Terminals.

Mirror-Sync per SSH anstossen

  • Beispiel einer maximal beschränkten SSH-Verbindung zum Anstossen des Mirror-Syncs auf ftp.ch.debian.org
  • Alte Variante, ein Ping ohne Feedback: no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="~/sync </dev/null >/dev/null 2>&1 &" ssh-rsa AAAAB3Nza…
  • Neue Variante, Parameterweitergabe via $SSH_ORIGINAL_COMMAND, Feedback via STDIN/STDOUT: no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="~/ftpsync" ssh-rsa AAAAB3Nza…

Zusammenfassung

  • SSH ist viel mehr als nur per Kommandozeile woanders einloggen.
  • Tunnel sind nicht böse, sondern wichtig.
  • SSH gibt's nicht nur auf und zu Linux-Rechnern.

Links (1/3)

Links (2/3)

Links (3/3)

Danke + Feedback

Danke an

  • Fabian Wenk für den Hinweis auf -D und damit der Idee zum Vortrag
  • Aaron Toponce, Michael Pobega, Michael Prokop, Sven Guckes, Jörg Jaspert, Alexander Wirt, Michael Stapelberg, Raoul vom CCC ZH und Venty für Tipps und Ideen zum Vortrag
  • Eric S. Meyer für S5

Feedback an

  • Axel Beckert
  • E-Mail: axel@beckert.ch