Не может сохранить пароль на той же сессии с $ оценки (ssh-агент) &&, ssh-добавляют

В Ubuntu 16.04 я выполнился:

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

Я добрался:

Agent pid 3361

Я затем SSH туннелировал в свой VPS успешно после вставки моего пароля.

Проблема:

Ну, дело не в этом большая часть "проблемы", но:

Я вернулся к своей локальной сессии с exit, и когда я пытался войти в свой VPS снова, я должен был повторно войти в свой пароль...

Мой вопрос:

Почему меня попросили бы ввести пароль снова?

Я не закрыл текущий сеанс и сделал eval $(ssh-agent) && ssh-add, перед туннелированием. Так, почему система не будет "помнить" это?

6
задан 11 February 2017 в 04:28

2 ответа

Каждый раз, когда вы делаете 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 один раз (или когда он по какой-то причине умирает), а затем сохраняете свои полномочия у агента.

4
ответ дан 23 November 2019 в 07:48

Вам нужно к , обнаруживают, если 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

я использую тот же самый отрывок для нескольких платформ и не только Mac или Linux на x86. Тот отрывок может быть далее улучшен, но на данный момент он работает на меня надежно.

2
ответ дан 23 November 2019 в 07:48

Другие вопросы по тегам:

Похожие вопросы: