web-dev-qa-db-ja.com

eval $(ssh-agent)&& ssh-addで同じセッションにパスフレーズを保存できません

Ubuntu 16.04で次を実行しました:

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

私が得た:

Agent pid 3361

次に、パスフレーズを挿入した後、VPSにSSHでトンネルしました。

問題:

まあ、それはそれほど「問題」ではありませんが、:

exitを使用してローカルセッションに戻り、VPSに再度ログインしようとすると、パスフレーズを再入力する必要がありました...

私の質問:

パスフレーズの再入力を求められるのはなぜですか?

トンネリングの前に、現在のセッションを閉じずにeval $(ssh-agent) && ssh-addを行いました。それでは、なぜシステムはそれを「覚えていない」のでしょうか?

6
JohnDoea

eval $(ssh-agent) && ssh-addを実行するたびに新しいエージェントが起動するため、再認証する必要があります。

セッションごとに永続的にSSHエージェントデータを(~/.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
}

. ${SSHPROC}.bashrcに追加します。

次に、restart_ssh_agentを1回(または何らかの理由で死んだとき)呼び出し、その後、エージェントで資格情報を保持します。

4
sds

ssh-agentを介して.bashrcが既に実行されているかどうかを検出する が必要です。実行されていない場合は、起動します。既に実行されている場合は、それを使用します。

これは、既存のセッションの環境変数を設定する私の.bashrcのスニペットです。

#
# 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

私はx86上のMacやLinuxだけでなく、複数のプラットフォームで同じスニペットを使用しています。このスニペットはさらに改善できますが、今のところは確実に動作します。

2
Sam Gleske