SSH Tipps & Tricks

Axel "XTaran" Beckert

Symlink.ch / Hackerfunk / 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 (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?
  • 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` (GNOME Keyring funktioniert auch. Kann auch bereits 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.

Bordmittel (2): SSH-Agent

Mit dem SSH-Agent arbeiten

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

Bordmittel (3): 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 (4): 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

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 werden nicht getunnelt.

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

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
  • no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="~/sync </dev/null >/dev/null 2>&1 &" 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

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 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