SSH mit mehreren Schlüsseln nutzen

Normalerweise erzeugt man einen privaten und einen öffentlichen Teil seines SSH-Schlüssels, hinterlegt den öffentlichen Teil auf den entsprechenden Servern und loggt sich mit diesen dort ein. Nun kann es aber durchaus vorkommen, dass man mit unterschiedlichen Schlüsselpaaren arbeiten muss um sich auf verschiedenen Servern einzuloggen. Zur Lösung dieses Problems existieren zwei Herangehensweisen, welche beide mit der SSH-Konfigurationsdatei arbeiten. Die Konfigurationsdatei ist im Home-Verzeichnis der Nutzers unter .ssh/config zu finden ist. Bei der ersten Möglichkeit werden die entsprechenden Schlüssel in der Konfigurationsdatei hinterlegt:

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_production
IdentityFile ~/.ssh/id_rsa_test
IdentityFile ~/.ssh/id_rsa_integration

Damit werden bei einem Login auf einem Server die Schlüssel der Reihe nach durchprobiert. Bei der zweiten Möglichkeit wird ein Host pro Server konfiguriert:

Host production production.example.com
    HostName production.example.com
    User root
    IdentityFile ~/.ssh/id_rsa_production
    

Host test test.example.com
    HostName test.example.com
    User root
    IdentityFile ~/.ssh/id_rsa_test

Host integration integration.example.com
    HostName integration.example.com
    User root
    IdentityFile ~/.ssh/id_rsa_integration

In der Konfiguration des Hosts befinden sich neben dem Host auch die zu nutzende Schlüsseldatei. Als weiteren Vorteil kann man die SSH-Verbindung nun über den definierten Kurznamen aufrufen:

ssh production

Dabei wird die Verbindung mit der definierten Schlüsseldatei aufgebaut, so dass ein durchprobieren der unterschiedlichen Schlüssel vermieden wird.

PGP-Schlüssel unter Mac OS X exportieren

Wer mittels PGP seine Mails verschlüsselt benötigt hierfür einen privaten und einen öffentlichen Schlüssel. Geht der private Schlüssel verloren, so können keine neuen Mails verschlüsselt und bestehende Mails nicht mehr gelesen werden. Deshalb ist es ratsam von dem Schlüssel ein Backup zu machen.

Die GPG Keychain unter Mac OS X

Die GPG Keychain unter Mac OS X

Unter Mac OS X wird dazu die GPG Keychain geöffnet und dort auf den entsprechenden Schlüssel geklickt. Im Kontextmenü muss der Punkt Exportieren ausgewählt werden. In dem sich öffnenden Dialog muss die Checkbox Geheimen Schlüssel ebenfalls exportieren ausgewählt sein. Damit wird der öffentliche und der private Schlüssel in eine ASCII-Datei exportiert, welche anschließend sicher verwahren kann.

PuTTY SSH Schlüssel in OpenSSH Schlüssel umwandeln

Möchte man den privaten SSH Schlüssel welcher mittels des „PuTTY Key Generator“ erzeugt wurde auch in der „Git Bash“ nutzen, so muss man den Schlüssel in das OpenSSH Format bringen.

Der PuTTY Key Generator

Der PuTTY Key Generator

Dazu öffnet man den PuTTY Schlüssel mittels „File“ -> „Load private key“. Anschließend wird der Schlüssel über „Conversions“ -> „Export OpenSSH key“ in eine Datei mit dem Namen „id_rsa“ exportiert. Diese Datei wird dann in den Benutzerordner (z.B. „c:\Users\seeseekey\.ssh\“ unter Windows 7) gelegt. Anschließend kann der Schlüssel auch unter der Git Bash benutzt werden.

ssh-copy-id unter Mac OS X benutzen

Mittels des Kommandos „ssh-copy-id“ ist es ohne weitere Probleme möglich den öffentlichen SSH Schlüssel auf einen entfernten Rechner zu kopieren. Leider gibt es dieses Kommando nicht unter Mac OS X. Dank des Scriptes von devthought kann man dies aber unter Mac OS X nachrüsten. Dazu gibt man folgende Befehle im Terminal ein:

curl -O https://seeseekey.net/wp-content/uploads/2014/12/ssh-copy-id.sh
sudo cp ssh-copy-id.sh /usr/bin/ssh-copy-id
sudo chmod a+x /usr/bin/ssh-copy-id

Danach kann das Kommando benutzt werden:

ssh-copy-id -i ~/.ssh/id_rsa.pub 

Anschließend sollte man sich ohne Passwort an dem entsprechenden Rechner anmelden können.

KVM Host aufsetzen und einrichten

Virtualisierung an sich ist eine feine Sache, man nehme einen Rechner und simuliere auf diesem mehrere Rechner. Dank KVM ist die ganze Sache auch ziemlich einfach. Dazu installiert man auf einem Rechner ein Ubuntu Server 12.10 (mit dem OpenSSH Paket, und einem Nutzer (in diesem Fall „seeseekey“)). Dabei sollte man darauf achten, das der Nutzer kein verschlüsseltes „home“-Verzeichnis hat, sonst könnte es später Probleme mit der Verwendung von SSH Schlüsseln geben. Anschließend überprüft man auf der Konsole mittels:

cat /proc/cpuinfo

ob die CPU über die entsprechende Virtualisierungsfunktionen verfügt. Die erkennt man in der Sektion „flags“ der Ausgabe. Dort muss für Intel CPUs das Flag „vmx“ und für AMD CPUs das Flag „svn“ vorhanden sein. Ist dies der Fall so kann KVM mittels:

sudo apt-get install qemu-kvm libvirt-bin virtinst

installiert werden. Ein anschließendes:

kvm-ok

überprüft dann nochmal ob die CPU wirklich für KVM geeignet ist. Dabei ist zu beachten das es „kvm-ok“ nur unter Ubuntu gibt, andere Distribution enthalten es aller Wahrscheinlichkeit nach nicht. Nun muss der Nutzer noch der Gruppe „libvirtd“ hinzugefügt werden. Auf der Konsole ist dazu ein:

sudo adduser seeseekey libvirtd

nötig. Danach sollte der KVM Host neugestartet werden, bzw. sich an- und abgemeldet werden. Zur Verwaltung der Maschinen wird der „Virtual Machine Manager“ benutzt. Dieser wird auf der entsprechenden Zielmaschine (welche nicht identisch mit dem KVM Host sein muss) mittels:

sudo apt-get install virt-manager

installiert. Auf der entsprechenden Maschine, welche die Verwaltung übernimmt sollte ein SSH Schlüssel erzeugt werden. Dies geschieht auf der Konsole:

ssh-keygen -t rsa -C ""

Nun übertragen wir den Schlüssel auf den KVM Host, damit wir uns mit diesem verbinden können, was dann so aussehen könnte:

ssh-copy-id -i ~/.ssh/id_rsa.pub seeseekey@kvmhost

Danach sollte der „Virtual Machine Manager“ gestartet werden. Über „Datei“ -> „Verbindung hinzufügen“ wird im darauf folgenden Dialog der KVM Host hinzugefügt.

Eine Verbindung wird hinzugefügt

Nun wird noch eine Netzwerkbrücke eingerichtet. Diese dient dazu, das man die virtuellen Maschinen auch von außen ansprechen kann. Ohne diese Brücke befinden sich die Maschinen hinter einem NAT und können nur mit dem KVM Host kommunizieren.

Um die Bridge zu erstellen wird die Datei „/etc/network/interfaces“ geändert. Auf einem normalen System sollte diese wie folgt aussehen:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Nun wird „auto eth0“ in „auto br0“ und „iface eth0 inet dhcp“ in „iface br0 inet dhcp“ geändert. Anschließend fehlt nur noch die Zeile:

bridge_ports eth0

welche am Ende hinzugefügt wird. Damit sieht die neue „/etc/network/interfaces“ dann wie folgt aus:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet dhcp
bridge_ports eth0

Danach geben wir im Terminal:

/etc/init.d/networking restart

mit root-Rechten ein und schon ist die entsprechende Konfiguration wirksam.

Die Storage Pools des KVM Host

Nachdem dies geschehen ist kann man eine neue virtuelle Maschine anlegen. Wenn man ein Windowssystem installiert, sollte man darauf achten, das man die entsprechenden Treiber anschließend installiert. Diese findet man unter http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/.

Bei den Storage Pools, in welchem die Daten für die virtuellen Maschinen liegen, empfiehlt es sich den „default“ Pool außen vor zu lassen. Stattdessen legt man sich einen Pool „images“ und einen Pool „machines“ an. Im „images“ Pool lagert man dann alle Betriebsystemimages für die Installation neuer Maschinen. Im „machines“ Pool hingegen, sollten sich die installierten Maschinen befinden.

Das Quellgerät muss auf die Netzwerkbrücke eingestellt werden

In jeder virtuellen Maschine muss dabei das Quellgerät in der Netzwerkkonfiguration auf die Netzwerkbrücke (br0) eingestellt werden. Damit ist die Maschine ein Teil des Netzwerkes in welchem sich auch der KVM Host befindet. Bei den virtuellen Maschinen, empfiehlt es sich bei grafischen Systemen in der entsprechenden Konfiguration unter „Video“ das Modell „vmvga“ auszuwählen.

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/SSH
http://wiki.ubuntuusers.de/KVM
http://wiki.ubuntuusers.de/virt-manager
http://wiki.ubuntuusers.de/Virtualisierung
http://de.wikipedia.org/wiki/Kernel-based_Virtual_Machine