SSH-Agent: keychain

TerminalUm einen SSH-Login ohne Passwort zu ermöglichen kann man ohne weiteres SSH-Keys ohne Passphrase verwenden. Dies hat allerdings einen großen Nachteil: wird der Key „gestohlen“ bzw. gerät er in die falschen Hände, kann ein Angreifer sich ohne weiteres auf den betroffenen Systemen einloggen.

Trotzdem braucht man passwortlose Logins des öfteren. Ein gutes Beispiel hierfür sind automatisierte Backups per Cronjob. An dieser Stelle kommt keychain ins Spiel. Hier handelt es sich um ein Programm, welches die Umgebungsvariablen des SSH-Agents speichert und so auch anderen Login-Shells zur Verfügung stellt.

Das Passwort muss also nur ein ein einziges mal eingegeben werden und steht dann solange zur Verfügung bis der keychain Deamon beendet wird.

Installation
Unter Debian und Ubuntu-Systemen muss hierzu das Paket keychain installiert werden.

root@server01 ~ $ apt-get install keychain

Anschließend muss (wenn nicht schon geschehen) ein SSH-Key generiert werden, natürlich mit einer entsprechenden Passphrase. Dazu kann wie gewohnt das Kommando ssh-keygen verwandt werden. Informationen dazu findet man auf der entsprechenden Man-Page. Ich möchte hier gar nicht weiter darauf eingehen, weil ich mal davon ausgehe, dass Menschen, die sich so etwas einrichten, wissen was sie tun.

Anschließend muss der Key in keychain importiert werden. Dies geschiet folgendermaßen:

root@server01 ~ $ keychain --quiet ~/.ssh/id_rsa

Hier wird einmalig nach der Passphrase des SSH-Keys gefragt. Anschließend kann man sich ohne weiteres auf allen Servern Passwortlos einloggen. Wird die Sitzung beendet müssen die Umgebungsvariablen per

source ~/.keychain/$HOSTNAME-sh

neu geladen werden.

Automatisches Freischalten des Keys
Um die gespeicherten Umgebungsvariablen beim Einloggen eines Users automatisch zu laden, kann man sich das folgende Snippet in die Servereigene ~/.bash_profile kopieren. Sofern der SSH-Key (in diesem Fall ein RSA2 Key) noch nicht geladen wurde, wird er hier zusätzlich noch automatisch importiert und nach dem Passwort gefragt. Der Parameter $HOSTNAME sollte entsprechend angepasst werden.

if [[ -f ~/.ssh/id_rsa ]]; then
  keychain --quiet ~/.ssh/id_rsa
  source ~/.keychain/$HOSTNAME-sh
fi

Der Parameter –quiet unterdrückt hier die „größere“ Ausgabe, um nicht weiter zu stören. Das Kommando source importiert die Umgebungsvariablen.

Bei einem Script, welches z. B. per Cronjob gestartet wird, kann die Einbindung von Keychain folgendermaßen aussehen:

#!/bin/bash
# MeinScript.sh

# Umgebungsvariablen laden
source /root/.keychain/$HOSTNAME-sh

# Per SCP eine Datei hohlen
scp root@192.168.168.26:/root/foo /root/bar

Sobald der Deamon keychain beendet wird (z. B. in dem der Server stromlos gemacht oder rebootet wird), hat ein Angreifer keine Chance mehr. 🙂

Kommentare (2)

Mike07.04.2009 um 21:56 Uhr

Coole Sache 😀

Simon07.04.2009 um 21:58 Uhr

> Coole Sache
Das stimmt… hehe. 😉

Einen Kommentar hinterlassen

Dein Kommentar