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

12

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

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

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

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

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

Niks
источник
Смотрите эту ветку на сайте Unix & Linux.
Janosdivenyi

Ответы:

12

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

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

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

user1686
источник
Есть идеи, как автоматизировать Mac OSX Terminal?
Никс
Когда я выполнил команду, $SSH_AUTH_SOCK я получаю результат как:: -bash: /tmp/ssh-gT43vE99vk/agent.511Отказано в разрешении Я здесь запутался .. Погода мой агент работает или нет .. Можете ли вы направлять?
Никс
Он не предназначен для использования в качестве команды - это переменная , которую вы используете как часть другой команды. Например echo $SSH_AUTH_SOCKнапечатать его значение.
user1686
эй, приятель .. есть идеи? stackoverflow.com/questions/31916395/…
Никс
2

Попробуйте сделать это с ~ / .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

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

Shiro
источник
Спасибо за ответ, это означает, что агент SSH работает правильно. И после добавления этого не потребуется добавлять идентификатор каждый раз при запуске машины? Извините, если это глупый вопрос, но я новичок в ssh.
Никс
Если у вашего ключа ssh есть пароль, он будет запрашивать каждый раз, когда вы входите в систему.
Широ
Этот ответ вреден . Если вы сделаете то, что он говорит, он удалит ваш закрытый ключ. Если у вас нет другого способа аутентификации, вы потеряете доступ к системам, в которых вы использовали аутентификацию с открытым ключом.
Касперд
2

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

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

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

Оливье Лакан
источник
2
Это правильный ответ, после которого следует ssh-add -Aключ, который добавит все ключи в связку ключей. Кроме того, также создайте ~/.ssh/configи добавьте, UseKeychain yesчтобы macOS всегда сохраняла ваш ключ, как описано здесь: unix.stackexchange.com/questions/140075/…
lucasarruda
Мой MacBook по-прежнему забывает мою личность при перезагрузке, даже после попытки этого.
Доминик Сэйерс
0

Это решение удобно, если ваши 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, созданный фрагментом выше.

Ссылка

GMaster
источник