Ein SSH-Agent ist ein Programm, das das Eingeben von Passwörtern erleichtert. Es ist recht mühsam immer wieder das Passwort beim Verbindungsaufbau einzugeben. Durch diesen Agent ist es möglich, das Passwort des Agents nur einmal am Anfang einzugeben. Danach sind weitere Passworteingaben überflüssig und nicht nötig. Da ich so manche Verzeichnisse mittels Unison synchronisiere und dieses Programm ssh nutzt, ist es mit diesem Agent recht bequem. Wie man diesen Einrichtet wird in diesem Artikel erklärt.
Benötigtes Paket
- openssh (Arch Linux)
- openssh-client (Ubuntu)
Einrichtung einer Schlüsselpaar-Authentifizierung
Zuerst muss ein Schlüsselpaar erzeugt werden. Was ein Schlüsselpaar ist, kann in einem anderen Artikel gelesen werden, ich werde hier nicht darauf eingehen.
Update vom 2012-03-01: Ich würde nicht mehr einen anderen Pfad, als den Standard-Pfad für id_rsa
wählen (siehe
Kommentar von Dakira). Ich habe den Artikel dem entsprechend angepasst.
Durch ein
1
|
|
wird ein interaktives Programm gestartet, das ein
solches Schlüsselpaar erzeugt. Ich empfehle den Standard-Pfad zu nutzen. Nach dem optionalen Setzen eines Pfades wird
gefragt, welches Passwort gesetzt werden soll. Lässt man dieses leer, wird keines gesetzt, ich würde aber eines
empfehlen. Natürlich sollte man auf die Güte des Passworts achten.
Anschließend wurden in dem Verzeichnis /home/USER/.ssh
zwei Dateien angelegt:
id_rsa
(privater Schlüssel)id_rsa.pub
(öffentlicher Schlüssel)
Der öffentliche Schlüssel muss nun nur noch auf den externen Server verschoben werden:
1
|
|
Achtung:
Dabei ist es absolut wichtig, dass der öffentliche Schlüssel, d.h. die Datei mit der Endung \*.pub
auf den Server verschoben wird. Das erledigt der Befehl aber automatisch. D.h. man muss sich selbst nicht darum kümmern, welcher Schlüssel nun kopiert wird.
Nun kann über
1
|
|
geprüft werden, ob es geklappt hat. Der folgende
Prompt sollte zur Passwort-Eingabe auffordern:
Enter passphrase for key '/home/USER/.ssh/id_rsa':
Durch das Eingeben des vorher gesetzten Passworts entschlüsselt den privaten Schlüssel und man gelangt nun auf den gewünschten Server.
Rechte
Ich empfehle, dass die Rechte der Ordners ~/.ssh
, so angepasst werden, dass es keine Schreib- und Leserechte für group
,
world
gibt:
1
|
|
Nun haben wir eine Verbindung eingerichtet, die über öffentliche Schlüssel geschieht und nicht über das Passwort des Users auf dem Server.
Um nicht immer
1
|
|
eingeben zu müssen, empfehle ich das Anpassen
der Datei ~/.ssh/config
. In dieser können Aliase für Hosts gesetzt werden.
In meinem Fall sieht das ganze so aus:
1 2 3 4 |
|
Hierbei sind natürlich Name des Hosts, server
und user
anzupassen.
Dadurch reicht ein ssh home
, um sich zu dem Server zu verbinden.
Einrichtung des SSH-Agents
Nun sind alle Vorbereitungen getroffen, sodass wir nun den SSH-Agent einrichten können. Es gibt
verschiedene Agents, die genutzt werden
können. Ich hatte den normalen ssh-agent
ausprobiert. Dieser funktionierte leider nicht wie gewünscht. Somit wurde der
Agent von GnuPG erfolgreich getestet.
Update vom 2012-03-01: Da leider auch der GPG-Agent nicht 100%-ig zuverlässig funktioniert hatte, bin ich
mittlerweile auf keychain
umgestiegen. Siehe meinen Artikel Komfortabler SSH-Agent mit keychain. Somit sind die nachfolgenden Schritte nicht zu empfehlen.
Benötigtes Paket
- gnupg2
Das folgende Skript write-env-gnupg-agent.sh
startet den GnuPG-Agent, falls dieser nicht aktiv ist, oder nutzt den gestarteten.
1 2 3 4 5 6 7 8 |
|
Dieses Skript habe ich in meinem ~/bin
-Verzeichnis abgelegt und mittels
1 2 |
|
ausführbar gemacht. Außerdem wird dieses Skript gestartet, wenn meine Desktopumgebung geladen wurde. Dafür gibt es zwei Möglichkeiten dies einzurichten.
Möglichkeit 1: Graphical User Interface
Durch diese Möglichkeit wird das Skript mittels einer grapfischen Oberfläche eingerichtet. Unter meiner Desktopumgebung
'GNOME3' wird das Programm gnome-session-properties
durch das Eingabeaufforderungsfeld, nach dem Drücken der
Tastenkombination [Alt]+[F2]
und dem Bestätigen mittels Enter gestartet.
Nach einem beherzten Klick auf 'Hinzufügen' öffnet sich ein Dialog, der folgendermaßen befüllt werden sollte:
Durch das Schließen der beiden Fenster, werden die Einstellungen gespeichert.
Möglichkeit 2: Command Line Interface
Das, was man per GUI machen kann, funktioniert auch durch das Erstellen einer desktop
-Datei.
Die Datei write-env-gnupg-agent.sh.desktop
mit dem folgenden Inhalt
1 2 3 4 5 6 7 8 9 |
|
wird in dem Ordner ~/.config/autostart/
abgespeichert. Damit werden die Schritte getan, die auch die GUI machen würde.
Natürlich müssen auch hier wieder die Pfade angepasst werden.
Nun werden wir den GPG-Agent konfigurieren:
Die Konfigurationsdatei ~/.gnupg/gpg-agent.conf
hat in meinem Fall diesen Inhalt:
1 2 3 4 5 6 |
|
Mit den Zeilen 1 und 2 wird die Speicherdauer des Agent-Passwort auf drei Stunden gesetzt. Dadruch gibt man das Passwort nur alle drei Stunden ein.
Zu guter Letzt, wird die Zeile
1
|
|
in die ~/.bashrc
oder ~/.zshrc
eingetragen, sodass das Skript auch bei jedem Bash- oder ZSH-Aufruf
ausgeführt wird.
Nun kann mittels
1
|
|
ein Schlüssel mit dem
dazugehörigen Passwort im Agenten abgespeichert werden.
Mittels
1
|
|
werden alle hinzugefügten Schlüssel angezeigt.
Ich habe noch das Paket pinentry
installiert, das das Passwort nicht nur in der Konsole abfragen kann, sondern sich
ein Dialog-Fenster öffnet. Somit kann das Passwort auch bei einem grafischen Programm eingegeben werden.