Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Montag
23
März 2015

Ubuntu - SSH Key erzeugen

Für die Authentifikation per SSH kann man ein Schlüsselpaar mit oder ohne Passwort verwenden. Ein solches Schlüsselpaar erzeugt man mit

ssh-keygen -t rsa -b 4096 -C "me@example.com" -f ~/.ssh/id_rsa-new

Der Parameter -f ist optional und spezifiziert nur den Namen der Datei der den privaten Schlüssel enthält. Der öffentliche Schlüssel bekommt den gleichen Namen mit der zusätzlichen Dateiendung .pub.

Führt man das Kommando aus erhält man eine Ausgabe wie die folgende

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/myuser/.ssh/id_rsa-new.
Your public key has been saved in /home/myuser/.ssh/id_rsa-new.pub.
The key fingerprint is:
a6:f4:47:cf:32:67:a5:3e:44:26:cc:39:a4:22:c3:5b myser@myhost
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|          .      |
|         + o     |
|        S o.o    |
|     . . +.o..  E|
|      o + .o+. . |
|       o +o +o.  |
|        ooo+oo   |
+-----------------+

und es werden zwei Dateien erzeugt:

$ ll ~/.ssh
-rw------- 1 myuser myuser 1,7K Mär 23 12:03 id_rsa-new
-rw-r--r-- 1 myuser myuser  402 Mär 23 12:03 id_rsa-new.pub

Der private Schlüssel id_rsa-new ist der Schlüssel mit dem man Zugriff auf einen Server erhalten kann und muss geheim gehalten werden. Wichtig für diese Datei ist, dass die Dateiberechtigungen so gesetzt werden, dass sie nur vom Benutzer gelesen und geschrieben werden darf, da sich sonst ssh beschwert und dessen Verwendung verweigert.

chmod 0600 ~/.ssh/id_rsa-new

Der öffentliche Schlüssel kann auf den Servern hinterlegt werden, auf denen man einen Zugriff per SSH möchte.

Entfernter Server

Um jetzt auf einem anderen Server den SSH Zugang über diesen Schlüssel zu ermöglichen, kopiert man den Inhalt der Datei ~/.ssh/id_rsa-new in die Datei ~/.ssh/authorized_keys auf dem Server.

cat ~/.ssh/id_rsa-new.pub | ssh myserver.local -l myusername "cat >> ~/.ssh/authorized_keys" 

Um vorher einen alten Key zu entfernen kann man folgendes machen

echo "sed -i '\,$(head -n 1 ~/.ssh/id_rsa-old.pub),d' ~/.ssh/authorized_keys" | ssh myserver.local bash

Damit der Server einen Authentifikation per Key zulässt muss in der Datei /etc/ssh/sshd_config folgendes gesetzt sein:

PubkeyAuthentication yes

Jetzt sollte man sich mit

ssh remotehost.de -l myusername

auf dem entfernten Server remotehost.de anmelden können. Die Option -l spezifiziert den Benutzernamen mit dem man sich am Server anmelden möchte und kann weggelassen werden wenn entweder der lokale Benutzername mit dem auf dem Server übereinstimmt oder man eine entsprechende Konfiguration unter ~/.ssh/config angelegt hat.

Script zum Ändern des Public Keys

Mit folgendem Script kann man das Ändern des Public Keys automatisieren.

Dem Script muss als Argument der Zielserver übergeben werden. Der neue Key muss unter ~/.ssh/id_rsa.pub und der alte Key unter ~/.ssh/id_rsa-old.pub liegen.

Also z.B.

replaceKey.sh www.myserver.de

Das Script fügt den neuen Key in die Datei ~/.ssh/authorized_keys auf dem Zielserver ein und entfernt bei Erfolg den alten Key.

#!/bin/bash
if [ -z $1 ]
then
        echo "No server given. Exiting..."
        exit 1
fi

# Add new key
cat ~/.ssh/id_rsa.pub | ssh $1 "cat >> ~/.ssh/authorized_keys"

# Remove old key
if [ $? -eq 0 ]
then
        echo "sed -i '\,$(head -n 1 ~/.ssh/id_rsa-old.pub),d' ~/.ssh/authorized_keys" | ssh $1 bash
else
        echo "Unable to add new key to ~/.ssh/authorized_keys on $1. Aborting..."
fi

# Show file ssh $1 "cat ~/.ssh/authorized_keys"

Das Script gibt am Schluss die Datei ~/.ssh/authorized_keys auf dem Zielserver zur Kotrolle aus.