Несколько учетных записей Github на одном компьютере всегда видят одну учетную запись

Это, вероятно, не дубликат; Я прочитал много подобных проблем в StackOverflow, но не эту проблему.

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

$ git push -u origin master
ERROR: Permission to <act2>/<repo>.git denied to <act1>.

Сначала я попробовал несколько методов SSH. Когда я получил вышеуказанную ошибку, я создал совершенно нового пользователя на моем локальном компьютере, зарегистрировавшись как этот пользователь, воссоздал локальное репо (его первое нажатие) и повторил попытку. Такая же ошибка. Мой локальный .config показывает пользователя так же, как и мой ~/.gitconfig.

Любые идеи?

Я делаю: ssh @localhost затем ssh -vvv -T git @github.com

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


debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home//.ssh/known_hosts:1
debug2: bits set: 513/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: Wrote 16 bytes for a total of 1015
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug3: Wrote 48 bytes for a total of 1063
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key:  
debug2: key:  
debug2: key: /home//.ssh/identity ((nil))
debug2: key: /home//.ssh/id_rsa ()
debug2: key: /home//.ssh/id_dsa ((nil))
debug3: Wrote 64 bytes for a total of 1127
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred gssapi-keyex,gssapi-with-mic,gssapi,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: 
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 368 bytes for a total of 1495
debug1: Authentications that can continue: publickey
debug1: Offering public key: 
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 368 bytes for a total of 1863
debug1: Remote: Forced command: gerve 
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp 
debug3: sign_and_send_pubkey
debug3: Wrote 640 bytes for a total of 2503
debug1: Remote: Forced command: gerve 
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug3: Wrote 128 bytes for a total of 2631
debug2: callback start
...

Ответ 1

Это происходит из-за того, что ssh-agent кэширует ssh-ключ (вы даже можете удалить файл, и он все равно позволит ssh подключиться успешно до тех пор, пока не будет очищен кеш) и будет определять приоритеты кэшированных ключей даже над теми, которые указаны в IdentityFile. Вы можете посмотреть, какие файлы кэшируются, запустив:

ssh-add -l

Вы можете заставить ssh-agent игнорировать кеш, включив IdentitiesOnly "yes" в .ssh/config для каждого подключения:

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_dsa_work
  IdentitiesOnly yes

Дополнительная информация здесь: http://sealedabstract.com/code/github-ssh-with-multiple-identities-the-slightly-more-definitive-guide/

Мне потребовалось некоторое время, чтобы это обнаружить, надеюсь, что это поможет кому-то.

Ответ 2

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

Если это случай, вы не должны создавать несколько пользователей в своей системе, чтобы просто использовать других пользователей GitHub для SSH. Правильный способ сделать это - настроить два псевдонима для github.com в ~/.ssh/config, которые указывают разные идентификационные файлы, как описано здесь. Например, у вас может быть ~/.ssh/config следующее:

Host github-act1
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.act1

Host github-act2
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.act2

Затем вы можете добавить два репозитория в свой репозиторий:

git add remote act1 [email protected]:whoever/whatever.git
git add remote act2 [email protected]:whoever/whatever.git

Затем, если вы хотите нажать как один пользователь, вы можете сделать:

git push act1 master

... или как вторая учетная запись:

git push act2 master

Ответ 3

Посмотрите права на папку .git и ее содержимое. Подтвердите, какой ключ SSH передается в github с помощью ssh github.com -vvvv.

Ответ 4

debug2: key:  
debug2: key:  
debug2: key: /home//.ssh/identity ((nil))
debug2: key: /home//.ssh/id_rsa ()
debug2: key: /home//.ssh/id_dsa ((nil))

Это выглядит ужасно подозрительно. Почему ваш домашний каталог просто /home/? Если несколько пользователей имеют один и тот же домашний каталог, то я не удивлен, что ssh находит тот же ключ для обоих пользователей. Проверьте результаты

echo $HOME

во время входа в систему как каждый пользователь. Они должны указывать на разные каталоги.