it-swarm.com.de

Warum speichert ssh-agent meinen unverschlüsselten Schlüssel nicht zur späteren Verwendung?

Jedes Mal, wenn ich von unserem kopflosen Ubuntu-Server auf einen anderen Server einsetze, werde ich nach dem Kennwort für meine Schlüsseldatei gefragt. Auch wenn ich vorher eine Verbindung zum Server hergestellt habe.

Hast du vielleicht eine Idee warum das so ist? Es könnte etwas so Einfaches wie ssh-agent sein, das gerade nicht läuft oder so.

Der gleiche Schlüssel auf meinem Ubuntu Gnome-Desktop funktioniert einwandfrei. Sowohl auf dem Server als auch auf dem Desktop wird Ubuntu 10.10 ausgeführt.

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent
12
Treffynnon

Auch wenn der Agent aktiv ist und bestimmte Umgebungsvariablen nicht festgelegt sind, haben Sie keinen Verweis auf den Agenten. Darüber hinaus wird die Identität nicht automatisch an den Agenten gesendet, auch wenn alles in Ordnung ist. Dies ist eine Aufgabe für ssh-askpass, die nur in X-Sitzungen ausgeführt wird.

Wenn Sie bash verwenden, erstellen Sie die Datei ~/.bash_profile mit folgendem Inhalt:

# File: ~/.bash_profile

# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
  . ~/.profile
fi

# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
  echo "Starting ssh agent"
  eval $(ssh-agent -s)
  agent_started=1
fi

# ssh become a function, adding identity to agent when needed
ssh() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/ssh "[email protected]"
}
export -f ssh

# another example: git
git() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/git "[email protected]"
}
export -f git

ändern Sie den Dateinamen ~/.ssh/id_dsa entsprechend Ihren Anforderungen und fügen Sie diese Zeile zu ~/.bash_logout hinzu.

# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
  echo "Killing ssh agent"
  ssh-agent -k
fi

Ein letzter Hinweis: Dies stört eine Gnomensitzung nicht, da in diesem Fall nur ~/.profile bezogen wird und Sie von der grafischen Oberfläche ssh-askpass profitieren können, die nach einer Passphrase fragt und diese an ssh-agent sendet.

10
enzotib

Ich habe kürzlich begonnen, ssh-ident zu verwenden:

https://github.com/ccontavalli/ssh-ident

alles was Sie tun müssen, ist etwas hinzuzufügen wie:

alias ssh="/path/to/ssh-ident"

in deinem .bashrc. Alternativ können Sie ln -s /path/to/ssh-ident ~/bin/ssh oder ein anderes Verzeichnis in Ihrem PATH vor /bin und /usr/bin angeben.

2
rabexc

Diese Frage hat eine recht gute Antwort auf SuperUser .

Ich fand der Hinweis, Schlüsselbund zu verwenden ziemlich nützlich.

1
metakermit