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