У меня также была эта проблема при попытке развернуть некоторый код с помощью 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.pub
к агенту следующим образом:
ssh-add ~/.ssh/id_rsa.pub
Введите свою фразу-пароль, нажмите « 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
.