Сохранение идентификаторов, добавленных ssh-add, чтобы они сохранялись

19

Я недавно настроил, opensshчтобы я мог использовать его с git.

В процессе настройки (согласно этой статье ) я запустил команды:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>

Некоторое время спустя, после того, как я вышел из системы и вернулся, я попытался использовать, git pushя получил ошибку. Решением этой ошибки было выполнение тех же команд снова.

Пожалуйста, скажите мне, как я могу

  • Продолжайте ssh-agentработать, чтобы мне не пришлось начинать новый
  • Помните ключи, которые я добавил, чтобы мне не приходилось добавлять их каждый раз

Просто для пояснения, я использую zsh, поэтому некоторые функции bash не будут работать в моем .zshrc.

timotree
источник
Вы должны начать с понимания того, ssh-agentдля чего и как это работает, прежде чем пытаться удовлетворить это ваш витой вариант использования.
Jakuje
Какую ошибку вы получили?
Jakuje
@Jakuje Ошибка была о пропавшем pubkey и спросила: «Вы запустили ssh-agent?».
timotree

Ответы:

21

Для чего ssh-agentи как это работает?

ssh-agentСохраняет свои расшифрованные ключи надежно в памяти и в сеансе. Не существует разумного и безопасного способа сохранить расшифрованные ключи при перезагрузке / повторном входе в систему.

Хорошо, как я могу автоматизировать это?

Автоматизировать ssh-agentзапуск

Добавить

[ -z "$SSH_AUTH_SOCK" ] && eval "$(ssh-agent -s)"

к вашему ~/.bashrcили другому сценарию запуска ( ~/.zshrc).

Автоматизировать добавление ключей

Ключи могут быть автоматически добавлены при первом использовании, когда вы добавляете

AddKeysToAgent yes

к вашему ~/.ssh/config.

Для получения дополнительной информации ~/.ssh/configсм man ssh_config.

Jakuje
источник
Итак, вы говорите, если я включу AddKeysToAgent, то всякий раз, когда я набираю, eval "$(ssh-agent -s)"он будет добавлять мой ключ?
timotree
Если агент работает, и вы sshподдерживаете эту опцию, тогда да.
Jakuje
Не могли бы вы уточнить, как я могу автоматизировать запуск ssh-agentтогда?
Тимотри
В основном, как объяснено в другом ответе. [ -z "$SSH_AUTH_SOCK" ] && eval $(ssh-agent)
Jakuje
Это работает с Zsh?
timotree
3

Добавьте это к ~/.bashrc

Это означает, что ssh-agent будет запущен автоматически при открытии другого сеанса без вашего терминала.

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
fi

если вам нужен ключ, который будет добавлен к агенту, также добавьте этот

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
 ssh-add ~/.ssh/<your private ssh key>
fi
Савитой Сингх
источник
1
Это был хороший ответ, но он не объясняет, что делает команда.
timotree