Почему ssh-agent не сохраняет мой незашифрованный ключ для последующего использования?

Каждый раз, когда я отправляю SSH на другой сервер с нашего безголового сервера Ubuntu, меня просят ввести пароль для моего файла ключей. Даже если я ранее подключался к серверу.

Ты хоть представляешь, почему это возможно? Это может быть что-то столь же простое, как ssh-agent, в данный момент не запущенное, или что-то в этом роде.

Тот же ключ на моем рабочем столе Ubuntu Gnome работает нормально. И сервер, и рабочий стол работают под управлением Ubuntu 10.10.

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent
12
задан 21 April 2011 в 17:25

3 ответа

На этот вопрос довольно хороший ответ в SuperUser .

Я нашел подсказку использовать Keychain довольно полезным.

0
ответ дан 21 April 2011 в 17:25

Даже если агент включен, если определенные переменные среды не установлены, у вас нет ссылки на агента. Более того, даже если все в порядке, агент и переменные, идентичность автоматически не отправляется агенту: это задача для ssh-askpass, работающая только в сеансах X.

Если вы используете bash, создайте файл ~/.bash_profile с таким содержанием:

# 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 "$@"
}
export -f ssh

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

измените имя файла ~/.ssh/id_dsa в соответствии с вашими потребностями и добавьте эту строку в ~/.bash_logout

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

Последнее примечание: это не мешает сеансу гнома, потому что в этом случае только ~/.profile получен, и вы можете воспользоваться графическим интерфейсом ssh-askpass, который запрашивает фразу-пароль и отправляет ее ssh-agent.

0
ответ дан 21 April 2011 в 17:25

Я недавно начал использовать ssh-идент:

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

все, что вам нужно сделать, это добавить что-то как:

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

в вашем .bashrc. Кроме того, вы можете ln -s /path/to/ssh-ident ~/bin/ssh или какой-либо другой каталог в вашем PATH до /bin и /usr/bin.

0
ответ дан 21 April 2011 в 17:25

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

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