Проблемы с переключением учетных записей Github на терминале - PullRequest
32 голосов
/ 25 сентября 2011

Прошло много времени с тех пор, как я что-то отправил на GitHub.Я изначально настроил свою учетную запись на моем компьютере, и все работало отлично.Затем я изменил свою учетную запись на учетную запись клиента (чтобы я мог отправить код в их личный репозиторий).

Прошло много времени, и теперь я возвращаюсь к своей старой учетной записи, и у меня возникают проблемы.Я сгенерировал новый rsa_key и в значительной степени следовал инструкциям здесь до T.

Однако, когда я печатаю: ssh -T git@github.com, я получаю:

Привет oldincorrectusername!Вы успешно прошли аутентификацию, но GitHub не предоставляет доступ к оболочке.

Я также не могу нажать на свои репозитории, потому что это старое имя пользователя клиента не авторизовано.Я дважды проверил свои ssh-ключи как на своем компьютере, так и в настройках учетной записи на GitHub.

Я также установил глобальные переменные учетной записи:

git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@youremail.com"
git config --global github.user username
git config --global github.token 0123456789yourf0123456789token

И все же это дает мнестарое имя пользователя

Есть предложения?

Спасибо,

1 Ответ

58 голосов
/ 26 сентября 2011

Проблема в том, что ваш локальный ssh все еще предлагает ваш «старый» SSH-ключ для GitHub. Это часто происходит, когда у вас есть один ключ, распознаваемый GitHub (т. Е. Ваш «старый» ключ), загруженный в ssh-agent , но вы хотите использовать другой ключ, распознаваемый GitHub (т.е. ваш «новый» ключ) .

ssh предлагает ключи в следующем порядке:

  1. указанные ключи, которые были загружены в агент
  2. другие ключи, которые были загружены в агент
  3. указанные ключи, которые не были загружены в агент

Под «указанными ключами» я подразумеваю те ключи, которые указаны параметром командной строки -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 переменная конфигурации).

...