У меня также была эта проблема при попытке развернуть некоторый код с помощью Capistrano . Очень расстраивает. Вот два известных мне метода решения этой проблемы.
Способ 1. Добавьте все известные ключи к агенту SSH.
Таким образом, одно решение, которое я нашел, - это запустить ssh-add
с -A
опцией, которая добавляет все известные идентификаторы к агенту SSH, используя любые парольные фразы, хранящиеся в вашей цепочке для ключей, например:
ssh-add -A
Теперь это работает, но не будет сохраняться при перезагрузке. Так что если вы хотите больше никогда не беспокоиться об этом, просто откройте ~/.bash_profile
файл вашего пользователя, например так:
nano ~/.bash_profile
И добавьте эту строку внизу:
ssh-add -A 2>/dev/null;
Теперь, когда вы открываете новое окно терминала, все должно быть хорошо!
Способ 2. Добавьте к агенту только ключи SSH, которые находятся в цепочке для ключей .
Поэтому, хотя эта ssh-add -A
опция должна работать для большинства базовых случаев, недавно я столкнулся с проблемой, когда у меня было 6-7 блоков Vagrant (которые используют SSH-ключи / идентификаторы для доступа) на компьютере поверх более распространенного id_rsa.pub
на месте.
Короче говоря, я оказался заблокированным на удаленном сервере из-за слишком большого количества неудачных попыток на основе ключей / идентификаторов SSH, поскольку доступ к серверу был основан на пароле, а ключи / идентификаторы SSH являются ключами / идентификаторами SSH. Таким образом, агент SSH попробовал все мои ключи SSH, не удалось, и я даже не смог получить запрос пароля.
Проблема заключается в том, что ssh-add -A
мы просто произвольно добавим каждый ваш ключ / идентификатор SSH к агенту, даже если в этом нет необходимости; такие как в случае бродячих коробок.
Мое решение после большого тестирования было следующим.
Во-первых, если к вашему агенту добавлено больше ключей / идентификаторов SSH, чем нужно, как показано на рисунке, ssh-add -l
затем удалите их все из агента следующим образом:
ssh-add -D
После этого запустите агент SSH в качестве фонового процесса, например:
eval "$(ssh-agent -s)"
Теперь, это становится странным, и я не слишком уверен, почему. В некоторых случаях вы можете специально добавить ~/.ssh/id_rsa
ключ / идентификатор к агенту следующим образом:
ssh-add ~/.ssh/id_rsa
Введите свой пароль, нажмите, Returnи вы должны быть в порядке.
Но в других случаях этого достаточно, чтобы добавить ключ / идентификатор:
ssh-add -K
Если это все сработало, введите, ssh-add -l
и вы увидите один одиночный ключ SSH / идентификатор в списке.
Все хорошо? Теперь откройте свой .bash_profile
:
nano ~/.bash_profile
И добавьте эту строку внизу; прокомментируйте или удалите -A
версию, если она у вас есть:
ssh-add -K 2>/dev/null;
Это позволит перезагружать ключ / идентификатор SSH агенту SSH при каждом запуске / перезагрузке.
ОБНОВЛЕНИЕ: Apple теперь добавила UseKeychain
параметр к открытым параметрам конфигурации SSH и также рассматривает ssh-add -A
решение.
Начиная с macOS Sierra 10.12.2, Apple добавила UseKeychain
параметр конфигурации для настроек SSH. Проверка страницы руководства (через man ssh_config
) показывает следующую информацию:
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a par-
ticular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be ``yes'' or ``no''. The default is ``no''.
Что сводится к тому, что Apple рассматривает решение как добавление ssh-add -A
к вашему, .bash_profile
как описано в этом билете Open Radar, или добавление в UseKeychain
качестве одного из вариантов для каждого пользователя ~/.ssh/config
.
$ ssh-add -K
дает мнеssh-add: illegal option -- K