Проблема в том, что ваш локальный 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, система может автоматически загружать ваш «старый» ключ, если вы отметили «Запомнить пароль в моей цепочке для ключей» при запросе пароля в одной точке; Вы можете отключить эту автоматическую загрузку, удалив запись цепочки для ключей с помощью команды
/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
, для репозиториев вашего клиента (вы можете вернуть префикс git@
обратно, если хотите, но это необязательно, поскольку приведенные выше записи устанавливают User
переменная конфигурации).