Schlüssel erzeugen
Mit folgender Befehlskette lässt sich - unter Linux oder Windows mit z.B. Cygwin - leicht ein sicherer Schlüssel (4096 Bits) erstellen, der öffentliche Schlüssel wird ebenfalls auf den Server geladen. Einfach die zwei Variablen user@host
und user@host.domain
entsprechend anpassen.
export KEY=user@host && \
export LOGIN=user@host.domain && \
puttygen -t rsa -b 4096 -C "$KEY" -o ./$KEY.ppk && \
puttygen ./$KEY.ppk -O private-openssh -o ./$KEY && \
puttygen ./$KEY.ppk -O public-openssh -o ./$KEY.pub && \
ssh-copy-id -i ./$KEY.pub $LOGIN
Sollte bereits ein KeyAgent aktiv sein wird wahrscheinlich das ssh-copy-id
so nicht funktionieren - der Server kennt den Schlüssel ja noch nicht. Der Upload geht im Fehlerfall dann unter Cygwin beispielsweise so:
cat ./$KEY.pub | \
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no $LOGIN "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ssh config
Damit nicht bei jedem SSH Login der Key explizit mit angegeben werden muss (ssh -i key user@host
) kann man in der in der Datei ~/.ssh/config
ein entsprechendes Profil einrichten und mit einem einfachen ssh hostname
die Verbindung aufbauen (hostname
, domain
, myuser
, /some/path/key.pub
entsprechend anpassen).
Host hostname
Hostname %h.domain
User myuser
Port 22
IdentityFile /some/path/key.pub
ForwardAgent no
AddKeysToAgent yes
Key Agents
Vor dem SSH Key hatten wir uns mit einer User/Passwort Kombination angemeldet, sicherer ist nun die Variante User/Key, allerdings müssen wir nun immer noch ein Passwort - diesmal vom Schlüssel - eingeben, sprich für den User hat sich nichts verbessert.
ssh-agent
Der ssh-agent
steht sowohl unter Linux als auch Cygwin zur Verfügung. Wird ein Schlüssel benötigt der bereits vom ssh-agent
gespeichert ist wird er ohne weitere Abfrage direkt verwendet. Mit ssh-add /path/to/key
kann der Schlüssel geladen werden, das Passwort wird nur mehr 1x abgefragt, danach wird der Schlüssel vom Key Agent bereitgestellt.
Zur Start vom ssh-agent
wird das folgende Skript z.B. in die .bash_profile
eingetragen - der Agent startet sich bei jeder Shell und wird beim Schließen der Shell auch wieder beendet.
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "$SSHAGENT -k" 0
fi
ssh-pageant
Während der ssh-agent
die Schlüssel selbst verwaltet sind bei Windows-Hyprid-Systemen mit Cygwin oder MSYS/MingGW oft 2 Agents aktiv - 1x im Windows (z.B. der Agent pageant.exe
von Putty) und 1x im im API Wrapper. Das funktioniert, ist aber mitunter lästig. Cygwin’s ssh-pageant
leitet Schlüsselanfragen einfach an den jeweils aktiven Windows-Agenten weiter, somit werden die Schlüssel nur unter Windows verwaltet, stehen aber in beiden Welten zur Verfügung.
Unter Cygwin wird die .bash_profile
um folgende Zeilen ergänzt:
SSHAGENT=/usr/bin/ssh-pageant
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "$SSHAGENT -k" 0
fi
KeePass KeyAgent
Wer ohnehin für die Passwort-Verwaltung KeePass verwendet kann auch SSH Keys damit verwalten - das geniale Plugin KeeAgent installiert sowohl einen KeyAgent Klienten als auch Server - und KeePass ist somit nicht nur für Passwörter sondern auch für SSH Schlüssel gerüstet. Unter Cygwin kann der KeyAgent entweder mittels ssh-pageant
(s.o.) oder über ein Netzwerk-Socket verwendet werden.
Wer den Socket verwenden will (Aktivierung der Integration in den KeyAgent Einstellungen erforderlich!) schreibt dann diese Zeile in seine .bash_profile
(ggf. Pfad anpassen!)
export SSH_AUTH_SOCK=/tmp/keepassagent.sock