it-swarm.com.de

Passwort kann nicht in derselben Sitzung mit eval $ (ssh-agent) && ssh-add gespeichert werden

In Ubuntu 16.04 habe ich ausgeführt:

eval $(ssh-agent) && ssh-add

Ich habe:

Agent pid 3361

Ich habe dann SSH erfolgreich in mein VPS getunnelt, nachdem ich meine Passphrase eingegeben habe.

Das Problem:

Nun, es ist nicht so sehr ein "Problem", aber:

Ich bin mit exit zu meiner lokalen Sitzung zurückgekehrt, und als ich mich erneut bei meinem VPS anmelden wollte, musste ich meine Passphrase erneut eingeben ...

Meine Frage:

Warum sollte ich aufgefordert werden, die Passphrase erneut einzugeben?

Ich habe die aktuelle Sitzung nicht geschlossen und vor dem Tunneln eval $(ssh-agent) && ssh-add ausgeführt. Warum "erinnert" sich das System nicht daran?

6
JohnDoea

Jedes Mal, wenn Sie eval $(ssh-agent) && ssh-add ausführen, wird ein neuer Agent gestartet, sodass Sie sich erneut bei ihm authentifizieren müssen.

Ich denke, der beste Weg ist, die SSH-Agentendaten dauerhaft pro Sitzung zu speichern (in Ihrem ~/.profile):

export SSHPROC=${HOME}/.ssh/cur-proc.${HOSTNAME}
restart_ssh_agent(){
  . ${SSHPROC}
  kill ${SSH_AGENT_PID}
  /bin/rm -rf ${SSHPROC} ${SSH_AUTH_SOCK} /tmp/ssh-*
  ssh-agent > ${SSHPROC}
  cat ${SSHPROC}
  . ${SSHPROC}
  ssh-add
}

und füge . ${SSHPROC} zu deinem .bashrc hinzu.

Dann rufen Sie restart_ssh_agent einmal an (oder wenn es aus irgendeinem Grund stirbt) und behalten dann Ihre Anmeldeinformationen beim Agenten.

4
sds

Sie müssen erkennen, ob ssh-agent bereits über Ihren .bashrc ausgeführt wird . Wenn es nicht läuft, starten Sie es. Wenn es bereits ausgeführt wird, verwenden Sie es.

Hier ist ein Ausschnitt aus meinem .bashrc, der Umgebungsvariablen für eine vorhandene Sitzung einrichtet.

#
# setup ssh-agent
#
#start running ssh-agent if it is not already.
if [ ! 'root' = "${USER}" ]; then
  if ! pgrep ssh-agent &> /dev/null && ! uname -rms | grep Darwin &> /dev/null; then
    eval "$(ssh-agent -t 3600)" > /dev/null
  fi
  if ! uname -rms | grep Darwin &> /dev/null; then
    if [ -z "${SSH_AUTH_SOCK}" -o -z "${SSH_AGENT_PID}" ]; then
        #first time failed so try again.
        SSH_AUTH_SOCK="$(ls -l /tmp/ssh-*/agent.* 2> /dev/null | grep "${USER}" | awk '{print $9}' | tail -n1)"
        SSH_AGENT_PID="$(echo ${SSH_AUTH_SOCK} | cut -d. -f2)"
    fi
    if [ -z "${SSH_AUTH_SOCK}" -o -z "${SSH_AGENT_PID}" ]; then
      SSH_AUTH_SOCK="$(lsof -p "$(pgrep ssh-agent | tr '\n' ',')" | grep "${USER}" | grep -e "ssh-[^/]*/agent\.[0-9]\+$" | tr ' ' '\n' | tail -n1)"
      SSH_AGENT_PID="$(echo ${SSH_AUTH_SOCK} | cut -d. -f2)"
    fi
  fi
  [ -n "${SSH_AUTH_SOCK}" ] && export SSH_AUTH_SOCK
  [ -n "${SSH_AGENT_PID}" ] && export SSH_AGENT_PID
fi

Ich verwende das gleiche Snippet für mehrere Plattformen und nicht nur für Mac oder Linux auf x86. Dieses Snippet kann weiter verbessert werden, aber im Moment funktioniert es für mich zuverlässig.

2
Sam Gleske