SSH Tipps & Tricks

Axel "XTaran" Beckert

Symlink.ch / Hackerfunk / Debian / ISG D-PHYS, ETH Zürich

abe@noone.org
http://noone.org/abe/

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

Übersicht

  • Das Leben mit Bordmitteln leichter machen
  • Tunneln ist nicht böse, sondern wichtig
  • Ich bin drin! Und jetzt?
  • Neues in OpenSSH 5.4
  • Nette Tools drumherum
  • SSH ist nicht nur Unix-Sache
  • Verbindungen im Vornhinein kastrieren
  • Links und Abschluß

Bordmittel (1): 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)
  • eval `ssh-agent` (Kann auch durch Xsession gestartet worden sein.)
  • ssh-add
  • ssh-add -L (List)
  • ssh anderer.rechner -t -A ssh-add (Schlüssel von anderem Rechner in den Key-Agent laden.

Beinahe Bordmittel (2): Alternative SSH-Agents

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

Bordmittel (3): Mit dem SSH-Agent arbeiten

  • ssh-add -x (Lock)
  • ssh-add -X (Unlock)
  • ssh -A (Forward Agent)
  • ssh -a (Don't forward Agent)

Bordmittel (4): 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)
  • $ 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 (5): 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 (6): ProxyCommand

$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

Bordmittel (7): ControlMaster

$EDITOR ~/.ssh/config

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

Tunneln (1): Übersicht

  • Tunneln ist nicht böse sondern dient der eigenen Sicherheit und Privatsphäre
  • 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): 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
  • Viele Versionskontrollsysteme unterstützen ssh "out of the box": cvs (CVS_RSH=ssh), svn (svn+ssh://…), git, hg, etc.

Tunneln (3): X-Anwendungen tunneln

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

Tunneln (4): 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 außen 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): 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): 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 angepaßt 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

Neues in OpenSSH 5.4

  • Authentifizierung per Zertifikat (kein X.509)
  • "Netcat mode" v.a. für ProxyCommand: ssh hostX -W hostY:22
  • Passphrase-geschützte Keys mit AES-128 statt 3DES verschlüsselt.
  • Widerrufungslisten (Revocation Lists) in ssh und sshd
  • SFTP: Nur-Lesen-Flag und Umask-Setzen für den Server
  • SFTP: Rekursives get und put
  • SFTP: Option -h (human-readable) für ls
  • SFTP: Tabcompletion im Client
  • SFTP: Anpassung der sftp-Kommandozeilenoptionen an scp

Nette Tools drumherum (1): screen

GNU Screen erlaubt u.a. Shells und andere Text-Mode-Programme (z.B. mutt, irssi, centericq, 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

Nette Tools drumherum (2): 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 sofort wieder seine Shell, sobald die Verbindung wieder steht.

Nette Tools drumherum (3): sshfs

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

Nette Tools drumherum (4): 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.

SSH ist nicht nur Unix-Sache

  • Cygwin: POSIX-Umgebung für Windows inkl. OpenSSH (Client+Server)
  • Putty: Freier SSH-Client für u.a. Windows
  • WinSCP: Drag & Drop SCP für Windows, 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

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 div. Weiterleiten.
  • no-pty ssh-rsa AAAAB3Nza… verbietet Pseudo-Terminals.

Mirror-Sync per SSH anstoßen

  • Beispiel einer maximal beschränkten SSH-Verbindung zum Anstoßen 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)

Links (2)

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 und Venty für Tipps und Ideen zum Vortrag
  • Eric S. Meyer für S5

Feedback an

  • Axel Beckert
  • E-Mail, Jabber: abe@noone.org