Karstens Blog

SSH-Agent mit Komfort

Author: Karsten | January 04, 2009 | 1 Minute Read

Bei der Administration vieler Unix-Server ist ssh-agent eine große Hilfe. Leider ist der Agent nicht wirklich selbsterklärend in der Bedienung. Und es wird auch nicht gerade einfacher, wenn Bastion Hosts verwendet werden.

Es gibt viele Tipps, um den Agenten in die Umgebung einzubinden, etwa mittels .profile. Für mich funktioniert die folgende, vereinfachte Vorgehensweise. In meiner .bashrc habe ich diese Funktionen definiert:

export SESSION_FILE=~/.ssh/session
function sshagent() {
  eval `ssh-agent` && ssh-add .ssh/id_dsa
  echo export SSH_AUTH_SOCK=$SSH_AUTH_SOCK > $SESSION_FILE
  echo export SSH_AGENT_PID=$SSH_AGENT_PID >> $SESSION_FILE
  chmod 600 $SESSION_FILE
}
function ssh-reconnect() {
  source $SESSION_FILE
}
#[ -f $SESSION_FILE ] && ssh-reconnect

Auf dem ersten Terminal kann dann mit dem Kommando sshagent ein Agent gestartet werden, wobei einmalig die Passphrase eingegeben werden muss. Ein Login ist jetzt bereits auf alle Hosts, die den Schlüssel akzeptieren, ohne weitere Eingabe der Phrase möglich. Öffnet man ein weiteres Terminal mit einer Shell-Session, sind die notwendigen Umgebungsvariablen ntürlich nicht mehr verfügbar und müssen nun in die neue Session übernommen werden.

Da die notwendigen Angaben aber in dem „Session File” gespeichert wurden, kann bei einem erneuten Login auf dem Bastion Host mit dem Kommando ssh-reconnect wieder zu dem Agenten verbunden werden, was mit der letzten Zeile auch automatisch beim Login1) erfolgen kann.