Ответ 1
Проблема в том, что ваш локальный ssh по-прежнему предлагает ваш "старый" SSH-ключ для GitHub. Это часто возникает, когда у вас есть один распознанный GitHub ключ (т.е. Ваш "старый" ключ), загруженный в ssh-agent, но вы хотите использовать другой распознанный GitHub ключ (т.е. Ваш "новый" ключ).
ssh предлагает ключи в следующем порядке:
- указанные ключи, которые были загружены в агент
- другие ключи, которые были загружены в агент
- указанные ключи, которые не были загружены в агент
Под "указанными ключами" я имею в виду те ключи, которые заданы параметром командной строки -i
или параметр конфигурации IdentityFile
(который может быть задан с помощью опции командной строки ~/.ssh/config
или -o
).
Если ваш "старый" ключ загружен в агент, но ваш "новый" ключ отсутствует, тогда ssh всегда будет предлагать ваш "старый" ключ (из первой или второй категории) перед вашей "новой" клавишей (только никогда в последней категории, так как он не загружен), даже если вы укажете свой "новый" ключ с помощью -i
/IdentitiesOnly
.
Вы можете проверить, какие ключи загружены в ваш ssh-agent с помощью ssh-add -l
. Если указан ваш "старый" ключ, вы можете исправить проблему, выгрузив его из своего агента (обязательно также выгрузите другие ключи, распознанные GitHub, за исключением, возможно, вашего "нового" ключа):
ssh-add -d ~/.ssh/old_key_file
Если вы используете Mac OS X, система может автоматически загружать ваш "старый" ключ, если вы отметили "Запомнить пароль в моей цепочке ключей" при запросе пароля в какой-то момент; вы можете отключить эту автоматическую загрузку, удалив запись Keychain для ключа с помощью команды /usr/bin/ssh-add -K -d ~/.ssh/old_key_file
. Другие системы могут делать что-то подобное, но команды, чтобы сказать им, чтобы "остановить это", будут разными.
Вместо того, чтобы выгружать "старый" ключ из вашего агента, вы можете установить параметр конфигурации IdentitiesOnly
на yes
, чтобы сообщить ssh пропустить вторую категорию ключей (не указанные агентом ключи). Ваш ~/.ssh/config
может включать такой раздел:
Host github.com
User git
IdentityFile ~/.ssh/id_rsa # wherever your "new" key lives
IdentitiesOnly yes
Таким образом, не имеет значения, загружены ли какие-либо другие ключи, распознанные GitHub, в ваш агент; ssh всегда будет предлагать только ваш "новый" ключ.
Если вы ожидаете получить доступ к репозиториям обеих учетных записей GitHub, и вы не хотите редактировать файл конфигурации всякий раз, когда хотите переключиться между учетными записями GitHub, тогда вы можете настроить свой ~/.ssh/config
следующим образом:
Host clientname.github.com
HostName github.com
IdentityFile ~/.ssh/client_id_rsa # or wherever your "old" client key lives
Host github.com
IdentityFile ~/.ssh/id_rsa # or wherever your "new" key lives
Host github.com *.github.com
User git
Hostname github.com
IdentitiesOnly yes
Затем используйте URL-адреса типа github.com:GitHubAccount/repository
для ваших репозиториев и URL-адресов, таких как clientname.github.com:GitHubAccount/repository
для репозиториев ваших клиентов (вы можете поместить префикс [email protected]
, если хотите, но это не обязательно, поскольку указанные выше записи устанавливают User
).