Агент SSH теряет личность при перезагрузке компьютера

После создания ключей с именем id_rsa в месте по умолчанию. Я добавляю личность к агенту SSH с помощью команды ssh-add ~/.ssh/id_rsaЭто успешно добавляется.

Я могу использовать SSH, не вводя парольную фразу ключа, поскольку это уже с агентом SSH.

Но когда я перезагружаю машину или сервер, а затем проверяю идентичность командой ssh-add -L Я получаю сообщение как The agent has no identities,

Означает ли это, что когда мы перезагружаем машину, агент теряет личность? Это нормальное поведение или что-то, чего мне здесь не хватает?

Пожалуйста, ведите меня, я не очень знаком с SSH.

5 ответов

Решение

Это нормально. Цель ключевого агента - просто хранить дешифрованные ключи в памяти, но он никогда не будет записывать их на диск. (Это победит цель - почему бы просто не снять защиту с главного ключа?)

Таким образом, ключи должны быть разблокированы при каждом входе в систему, и вам нужно автоматизировать это - в Linux, используя pam_ssh это один вариант; он автоматически использует пароль вашей ОС для разблокировки агента. Еще один похожий модуль pam_envoy, что немного более надежно, но требует systemd.

Оба модуля запускают самого агента и автоматически загружают ключи.

В OS X ssh-add имеет специальный флаг для подключения к связке ключей, если вы решите сохранить там свой закрытый ключ.

Просто беги ssh-add -K ~/.ssh/id_rsa,

Я считаю, что это отвечает на ваш вопрос более полно. Этот специфический для OS X флаг трудно найти документацию, но он работает по крайней мере с OS X Leopard.

Попробуйте сделать это с ~ /.bashrc:

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Это должно запрашивать пароль только после входа в систему.

Его нужно разблокировать после каждой перезагрузки, чтобы загрузиться в память. Для этого добавьте следующее в свой~/.bashrc:

      eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa

Не называйте пару ключей при ее создании. Присвойте ключам осмысленное имя, связанное с ресурсом, к которому вы пытаетесь получить доступ. Это может быть что угодно, в имени по умолчанию нет ничего особенного.id_rsa.

Это решение удобно, если ваши ssh-ключи защищены парольной фразой.

Проблема со всеми приведенными выше ответами заключается в том, что если ваш закрытый ключ защищен парольной фразой, каждый раз, когда вы запускаете новый терминал и пытаетесь использовать закрытый ключ, вы должны вводить парольную фразу, и в конечном итоге вы будете запускать несколько копий ssh-agentв памяти. Решение состоит в том, чтобы добавить в ваш ~/.bashrc или же ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Это запросит парольную фразу вашего закрытого ключа (ов) ssh только один раз, когда вы запустите терминал. Последующее открытие новых сеансов терминала (или сеансов tmux) будет повторно использовать ssh-agent, созданный приведенным выше фрагментом.

Справка

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