SSH Schlüssel

SSH Schlüssel erstellen

Linux und Mac OS X

Sie können sich einfach ein SSH-Schlüsselpaar erstellen mit:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/name-des-keys

Damit wird ein eigenes Schlüsselpaar für RSA-Keys erzeugt. Es entstehen Dateien mit den Schlüsselpaaren in:

~/.ssh/name-des-keys
~/.ssh/name-des-keys.pub

Die name-des-keys.pub Datei kann anschließend auf den Zielhost kopiert werden.

Windows

Der zuvor beschriebene Weg kann mit den richtigen Shells auch in Windows genutzt werden. Wer lieber einen Schlüssel über eine GUI erstellt, kann auf PuTTY zurückgreifen. Hat man Putty installiert, kann man die Software PuTTYgen öffnen und sich dort einen Schlüssel erstellen.

PuTTYgen starten

PuTTYgen unter windows ausführen

Unter Bild 1 Nummer 1 kann man optional einen anderen Schlüssel-Typen wählen. Für SSH Schlüssel kann man die Voreinstellung auf RSA stehen lassen. Unter Nummer 2 sind in den Standard-Einstellungen noch 2048 angegeben. Hier sollte man den Wert auf 4096 erhöhen. Anschließend startet man mit Klick uf generate (Nummer 3) die Generierung des Schlüssels.

PuTTYgen Schlüssel generieren

Um ein zufälliges Muster zu generieren nutzt PuTTYgen die Mausbewegungen. Man muss jetzt mit der Maus so lange im Feld unter Bild 2 Nummer 1 kreisen, bis der Fortschritts-Balken am Ende angekommen ist und der Schlüssel generiert wurde.

PuTTYgen Schlüssel speichern

Unter Bild 3 Nummer 1 kann man sich optional einen Kommentar zur Schlüssel-Identifizierung hinterlassen. Das ist besonders hilfreich, wenn man sehr viele Schlüssel hat und der Datei-Name des Schlüssels nicht ausreicht.

Anschließend kann man unter Nummer 2 ein optionales Passwort für den Schlüssel vergeben. Dieses Passwort muss man anschließend immer verwenden um den Schlüssel zu authentifizieren. Entscheidet man sich für ein Passwort, muss dieses in Nummer 3 wiederholt werden. Ohne Passwort lässt man beide Felder einfach aus und kann direkt unter der Nummer 4 den Öffentlichen Schlüssel abspeichern. Sinngemäß sollte man, wie oben unter Linux/Mac den Speicher-Ort im Home-Verzeichnis des Benutzers im Unter-Verzeichnis .ssh (z.B. C:\Users\qm-b\.ssh\name-des-keys.pub) wählen. Viele Anwendungen nutzen diesen Pfad unabhängig vom Betriebssystem und so spart man sich später eine Reihe Konfigurationen oder gar verschieben des Schlüssels im Nachhinein.

Zu guter Letzt speichert man noch den privaten Part im gleichen Verzeichnis, gleicher Datei-Name mit der Endung ppk (z.B. C:\Users\qm-b\.ssh\name-des-keys.ppk).

Jetzt kann man PuTTYgen wieder schließen und

SSH Schlüssel auf den Server kopieren

Nutzen Sie nun slogin, ssh, oder scp, will der Server auf der anderen Seite den Nachweis, dass zu einem der dort in der authorized_keys liegenden öffentlichen Schlüssel ein privater Teil vorhanden ist. Der lokale Client verlangt also nach der Passphrase, um den in id_rsa gespeicherten privaten Schlüssel zu aktivieren. Passen beide Schlüssel zusammen, ist der Server überzeugt, dass Sie diejenige sind, die Zugang erhalten soll. Konfiguration

ssh-copy-id -p 22 -i ./homeserver.pub username@example.com

SSH Konfigurations-Datei

Die ssh-Konfiguration erlaubt das Setzen eines Server-Alias und Kompression der ssh-Verbindung. Beides erlaubt ein deutlich schnelleres Arbeiten. Hier das Beispiel einer ~/.ssh/config Datei:

# Host Setup für ExampleServer
Host ExampleServer # Festlegen des Host.
        HostName example.com # Hostname
        User MyUserNameOnExampleServer # Eigener Benutzer-Name auf dem Server
        PubKeyAuthentication yes # Festsetzen auf PubKey Auth
        IdentitiesOnly yes # Immer nur über PubKey verbinden
        IdentityFile ~/.ssh/name-des-keys # Pfad zum vorher erstellten Schlüssel
        Port 22 # SSH Port des Servers
        # Komprimierung festlegen (optional)
        Compression yes
        CompressionLevel 9

Die Host-Konfiguration kann man beliebig oft wiederholen, so dass man für jeden Server eine eigene Konfiguration erstellt hat. Die Bezeichnung der Hosts (im Beispiel ExampleServer) muss dabei eindeutig bleiben, der HostName innerhalb der Host Konfiguration kann dagegen mehrfach vorkommen. So kann man sich zum Beispiel mehrere Zugänge mit verschiedenen Benutzern auf einem Server schnell anlegen.

Anschließend kann man sich über die Kurz-Form ssh ExampleServer mit dem Server verbinden, ohne weitere Angaben machen zu müssen.

Bash ssh sessions

Um in der git bash nicht immer die Passphrase eingeben zu müssen, sondern nur beim ersten Benutzen des schlüssels, kann man eine SSH session in der .bashrc einrichten.

Die Datei findet man in seinem Home-Verzeichnis. Einfach in vscode oder vim bearbeiten:

vi ~/.bashrc
SSH_ENV=$HOME/.ssh/environment

eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

Will man Schlüssel automatisch laden, muss man die Funktion start_agent im obigen Code um die folgenden Zeile(n) ergänzen: (im Beispiel beide Schlüsselnamen key-host-a und key-host-b gegen die eigenen SSH Schlüssel tauschen)

ssh-add ~/.ssh/key-host-a
ssh-add ~/.ssh/key-host-b

Die Funktion sieht anschließend etwa so aus:

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add

    # custom keys
    ssh-add ~/.ssh/key-host-a
    ssh-add ~/.ssh/key-host-b
}

Anschließend muss man die bash noch neu starten.