Entfernt einloggen — Grundlagen der SSH-Nutzung

Axel "XTaran" Beckert

Debian / ETH Zürich / Hackerfunk

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

Übersicht

  • Was ist SSH? Vorgänger-Protokolle; SSH/OpenSSH Geschichte
  • Entfernt einloggen; Authentizität prüfen
  • Arbeiten mit Schlüsseln und SSH-Agent
  • Dateitransfer (SCP/SFTP)
  • Einzelne Ports weiterleiten/tunneln
  • SSH-Implementationen
  • Nützliches rund um SSH
  • Links und Abschluß

Was ist SSH?

  • Ein Kommandozeilen-Programm
  • Ein Protokoll und Standard zum verschlüsselt Daten übertragen
  • Eine Möglichkeit, eine Shell oder Anwendung auf einem anderen Rechner zu starten
  • Abwärtskompatibel zu RSH

Vorgängerprotokolle und SSH im Vergleich

  • Telnet: interaktives Login (Benutzername+Passwort), komplett unverschlüsselt
  • RSH: auch automatischer Login (basierend auf IP), Ein-/Ausgabe umleitbar → Nutzung in Skripten, für Backup, etc.
  • RCP: Kopieren von Dateien von/auf andere Rechner auf der Kommandozeile, sonst wie RSH
  • FTP: Interaktives Kopieren von Dateien auf andere Rechner
  • SSH = RSH + Verschlüsselung + viele weitere Features
  • SCP = RCP über SSH
  • SFTP = Benutzerschnittstelle wie FTP, aber über SSH

SSH/OpenSSH Geschichte

  • Entwicklungsauslöser: gesniffte Passwörter an der Uni Helsinki
  • Juli 1995: Tatu Ylönen veröffentlicht seine SSH als Freeware
  • November 1995: SSH 1.2.12 noch unter BSD-Lizenz veröffentlicht
  • Dezember 1995: Tatu Ylönen gründet SSH Communication Security
  • Februar 1996: SSH 1.2.13 mit nicht mehr freier Lizenz
  • Ende 1998: GNU Lsh (Implementation unter GPL)
  • Anfang 1999: Björn Grönvall forkt SSH 1.2.12 als OSSH
  • September 1999: OpenBSD forkt OSSH als OpenSSH
  • Okt./Nov. 1999: OpenBSD flickt alle in den vergangenen 4 Jahren bekannt gewordenen SSH-Bugs, linkt SSH gegen OpenSSL. Portierungen auf Linux + FreeBSD.

Entfernt Einloggen

user-a@rechner-a $ ssh user-b@rechner-b
The authenticity of host 'rechner-b (192.0.2.82)' can't be established.
ECDSA key fingerprint is 83:72:51:8a:d5:dc:50:86:1e:b1:bd:92:23:b1:9d:c1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rechner-b' (ECDSA) to the list of known hosts
Password: **************
Linux rechner-b 3.14-rc5-686-pae #1 SMP Debian 3.14~rc5-1~exp1 (2014-03-07) i686
user-b@rechner-b $ who am i
abe      pts/5        2014-03-15 14:53 (:0)
user-b@rechner-b $ exit
Connection to rechner-b closed.
user-a@rechner-a $
  

Überprüfen der Authentizität des Servers

Auf Rechner A:
user-a@rechner-a $ ssh user-b@rechner-b
The authenticity of host 'rechner-b (192.0.2.82)' can't be established.
ECDSA key fingerprint is 83:72:51:8a:d5:dc:50:86:1e:b1:bd:92:23:b1:9d:c1.es
Are you sure you want to continue connecting (yes/no)? ^C
user-a@rechner-a $
Auf Rechner B:
user-b@rechner-b $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 83:72:51:8a:d5:dc:50:86:1e:b1:bd:92:23:b1:9d:c1  root@nemo2 (ECDSA)
user-b@rechner-b $
Auf Rechner A:
user-a@rechner-a $ ssh user-b@rechner-b
The authenticity of host 'rechner-b (192.0.2.82)' can't be established.
ECDSA key fingerprint is 83:72:51:8a:d5:dc:50:86:1e:b1:bd:92:23:b1:9d:c1.
Are you sure you want to continue connecting (yes/no)? yes
Password: **************
Linux rechner-b 3.14-rc5-686-pae #1 SMP Debian 3.14~rc5-1~exp1 (2014-03-07) i686
user-b@rechner-b $

Alternative Digest-Darstellungen

Bubble-Babble Digest:
user-b@rechner-b $ ssh-keygen -B -f /etc/ssh/ssh_host_ecdsa_key.pub
256 xosav-kohel-micon-pahir-tolip-dupup-gyreb-suzap-cabym-culyb-goxox  root@nemo2 (ECDSA)
Mit leichter zu merkendem (aber nicht kryptografisch sicherem) Bildchen:
user-b@rechner-b $ ssh-keygen -lv -f /etc/ssh/ssh_host_ecdsa_key.pub
256 83:72:51:8a:d5:dc:50:86:1e:b1:bd:92:23:b1:9d:c1  root@nemo2 (ECDSA)
+--[ECDSA  256]---+
|      .o+*o      |
|     o +=+.      |
|    . +.E..      |
|       *.+ .     |
|    . = S .      |
|     o . +       |
|                 |
|                 |
|                 |
+-----------------+

Arbeiten mit SSH-Schlüsseln und SSH-Agent

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

Alternative SSH-Agents

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

Dateien übertragen mit SFTP, SCP

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

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

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)

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

Freie SSH-Implementationen (Client und Server)

  • OpenSSH (via Cygwin auch für Windows)
  • Dropbear: Freie SSH-Implementation für Embedded-Systeme (inkl. iPhone, AppleTV, Dreambox, viele NAS und Router)
  • GNU Lsh: GNU-Implementation des SSH-Protokolls unter GPL

Weitere SSH-Clients

  • Putty: Freier SSH-Client für u.a. Windows
  • WinSCP: Drag & Drop SCP für Windows, baut auf Putty auf.
  • Connectbot: SSH App für Android
  • 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

Nützliches rund um SSH

  • rsync: Synchronisieren von Dateien per SSH/RSH
  • mosh: Remote-Login ähnlich SSH, aber UDP, gut bei schlechter Verbindungsqualität
  • autossh: Automatisch SSH-Sessions neustarten nach Verbindungsabbruch
  • mssh, clusterssh, mussh, pconsole u.a.: Interaktiv die gleichen Befehle auf mehrere Rechnern ausführen
  • parallel-ssh, taktuk, u.a.: Nicht-interaktiv Befehle per SSH parallel auf mehreren Rechnern ausführen

Links

Feedback

Danke fürs Interesse und Zuhören

Folien zu diesem und weiteren SSH-Vorträgen

Feedback an

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