У меня тоже была эта проблема при попытке развернуть какой-то код с помощью 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 ключ/идентификацию, даже если в этом нет необходимости; как, например, в случае с ящиками Vagrant.
Мое решение после долгих тестов выглядело следующим образом.
Сначала, если к вашему агенту добавлено больше SSH ключей/идентификаций, чем вам нужно - как показано в случае с ssh-add -l
, то очистите их все от агента, как показано в случае с ~/.ssh/id_rsa.pub
:
ssh-add -D
Сделав это, запустите SSH агент в качестве фонового процесса примерно так:
eval "$(ssh-agent -s)"
Теперь, это становится странным, и я не слишком уверен, почему. В некоторых случаях вы можете специально добавить ключ/идентификацию ssh-add -l
к агенту примерно так:
ssh-add ~/.ssh/id_rsa.pub
Введите парольную фразу, нажмите кнопку Return и вы должны быть готовы к работе.
Но в других случаях простого запуска этого достаточно для добавления ключа/идентификации:
ssh-add -K
Если все работает, впишите .bash_profile
и вы должны увидеть один единственный SSH ключ/идентификацию в списке.
Все в порядке? Теперь откройте свой -A
:
nano ~/.bash_profile
И добавьте эту строку внизу; прокомментируйте или удалите версию UseKeychain
, если она у вас есть:
ssh-add -K 2>/dev/null;
Это позволит перезагружать SSH ключ/идентификацию в SSH агент при каждом запуске/перезагрузке.
UPDATE: Apple теперь добавил опцию ssh-add -A
в открытые параметры конфигурации SSH и также считает UseKeychain
решением.
Начиная с macOS Sierra 10.12.2, Apple (я полагаю) добавил опцию man ssh_config
config для конфигураций SSH. Проверка man-страницы (через ssh-add -A
) показывает следующую информацию:
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 видит решение либо в добавлении .bash_profile
к вашим UseKeychain
как объяснено в этом билете Open Radar , либо в добавлении ~/.ssh/config
как одной из опций для каждого пользователя 0x6&.