Aufgabenstellung: Für ein automatisiertes Backup eines Remote-Servers soll eine SSH-Verbindung vom Backup-Server aus aufgebaut werden können, ohne das weder ein Passwort eingegeben werden muss, noch eines im Klartext in einer Konfigurationsdatei hinterlegt werden muss.
Lösungsansatz: Mit dem Public-Key-Verfahren
werden Public- und Private-Keys generiert, welche sowohl Benutzer, wie auch den Host authentifizieren.
Voraussetzungen: Folgende Voraussetzungen müssen für die Umsetzung des o.g. Lösungsansatzes erfüllt sein:
- Auf beiden Servern muss das
openssh-server
Paket installiert sein. - SSH-Zugang auf dem Remote-Server muss initial vorhanden sein.
1. Client Setup
Der Client ist in diesem Kontext der Host, der eine Verbindung zur Gegenstelle aufbaut. In der Praxis könnte dies z.B. ein Backup-Server sein, der eine Verbindung zu einem Remote-Server aufbaut und ein Backup triggert.
1.1 Installation des openssh-server Paket:
# apt install openssh-server
1.2 Key-Generation
Generieren Sie das private und öffentliche Schlüsselpaar. Übernehmen Sie den vorgeschlagenen Speicherpfad und vergeben Sie kein Passwort für den privaten Schlüssel. Der private Schlüssel ist zwar der Dreh und Angelpunkt im Sicherheitskonzept des Public-Private-Key-Verfahrens
und sollte besonders geschützt werden, das Abfragen eines Passworts ist jedoch bei automatisierten Prozessen nicht immer zielführend. Zumindest nicht, wenn kein SSH-Client Verwendung findet, der den entschlüsselten Private-Key abspeichern kann:
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Überprüfen Sie die Berechtigungen des oben angelegten Verzeichnisses /root/.ssh
. Dieses sollte ausschließlich nur für root schreib- und lesbar sein.
# ls -la /root/
drwx------ 2 root root 4096 Okt 22 20:42 .ssh
Im Verzeichnis .ssh
befinden sich nun der private Schlüssel id_rsa
und der öffentliche Schlüssel id_rsa.pub
:
# ls -l /root/.ssh
-rw------- 1 root root 1831 Okt 22 20:42 id_rsa
-rw-r--r-- 1 root root 406 Okt 22 20:42 id_rsa.pub
1.3 Übertragen des Public-Key auf Remote-Server
ssh-copy-id
nutzt das SSH-Protokoll um sich mit dem Remote-Server zu verbinden und den SSH Benutzer Schlüssel zu übertragen. Das Kommando editiert das authorized_keys
File auf dem Remote-Server und legt das .ssh
Verzeichnis an, falls es nicht schon existiert. Des Weiteren überprüft es ob es diesen Schlüssel bereits gibt und ob die Zugriffsrechte auf die Schlüsseldateien den Vorgaben entsprechen.
Für das Übertragen des Public-Keys
ist initial eine durch Passwort abgesicherte SSH-Verbindung notwendig:
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote_server_ip_address
1.4 Anmelden auf dem Remote-Server
Um sich nun ohne Eingabe eines Passworts auf dem Remote-Server anzumelden, verwenden Sie folgende Syntax:
# ssh -i /root/.ssh/id_rsa root@remote_server_ip_address
2. Server Setup
Der Server ist in diesem Kontext der Host, zu dem die Verbindung aufgebaut werden soll. In der Praxis könnte dies z.B. ein online gehosteter Web-Server sein zu dem ein Backup-Server automatisiert eine Verbindung aufbaut, um den Host zu sichern.
Im Prinzip ist es ausreichend die Schritte aus dem Client Setup
auszuführen. Es ist jedoch weiterhin möglich, dass sich Benutzer auch ohne dem Public-Key-Verfahren
am Remote-Server durch die Eingabe eines Passworts anmelden. Möchten Sie die Anmeldung ausschließlich auf das Public-Key-Verfahren
einschränken, ist es erforderlich in der SSH-Konfigurationsdatei /etc/ssh/sshd_config
den Parameter PasswordAuthentication
auf no
zu setzen.