Возникли проблемы с переключением учетных записей Github на терминале

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

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

Однако, когда я набираю: ssh -T [email protected], я получаю:

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

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

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

git config --global user.name "Firstname Lastname"
git config --global user.email "[email protected]"
git config --global github.user username
git config --global github.token 0123456789yourf0123456789token

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

Какие-либо предложения?

Спасибо,


person goddamnyouryan    schedule 25.09.2011    source источник
comment
В каждом репо могут быть локальные настройки git, вы их читали? git config --local --list пока в репозитории.   -  person chelmertz    schedule 26.09.2011
comment
Содержат ли исходные URL информацию о пользователе? (url = [email protected]/user/project.git) Используйте git remote show -vv origin, чтобы узнать   -  person knittl    schedule 26.09.2011
comment
@knittl - Какое это имеет значение, если ssh -T [email protected] даст старое имя пользователя   -  person manojlds    schedule 26.09.2011


Ответы (1)


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

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

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

Под «указанными ключами» я подразумеваю те ключи, которые указаны параметром командной строки -i или параметром конфигурации IdentityFile (который может быть задан через параметр командной строки ~/.ssh/config или -o).

Если ваш «старый» ключ загружен в агент, а ваш «новый» ключ нет, то ssh всегда будет предлагать ваш «старый» ключ (из первой или второй категории) перед вашим «новым». ” (только в последней категории, так как он не загружается), даже если вы указываете свой «новый» ключ с помощью -i/IdentitiesOnly.


Вы можете проверить, какие ключи загружены в ваш ssh-агент с помощью 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).

person Chris Johnsen    schedule 26.09.2011
comment
Спасибо за невероятно полный ответ. Я многому научился, читая ее. В итоге я использовал описанный вами метод IdentitiesOnly. - person goddamnyouryan; 26.09.2011