Нажмите на .git, но отказано не тому пользователю, наконец решено - PullRequest
0 голосов
/ 27 марта 2019

Я много гуглю.но он по-прежнему сообщает об ошибке после выполнения 'git push -u origin master'.Наконец, я выполняю 'git push -u origin master' успешно, но я действительно не знаю, где ошибка.Пожалуйста, внимательно прочитайте содержание, как изложено ниже.

1, у меня есть учетная запись git 'HelenZeng', теперь у меня есть другая учетная запись 'Snowbabe'

2, я генерирую два ключа ssh, один - id_rsa_helen, другой - id_rsa_snow

3, я касаюсь ~ / .ssh / config

#github.snowbabe
  Host github.com-Snowbabe
          HostName github.com
          User Snowbabe
          IdentityFile ~/.ssh/id_rsa_snow

  #github.helenzeng
  Host github.com-HelenZeng
          HostName github.com
          User HelenZeng
          IdentityFile ~/.ssh/id_rsa_helen

4, я пробовал поискать в Google, если честно, я действительно не знаю, зачем использовать ssh-add

$ ssh-add ~/.ssh/id_rsa_helen
$ ssh-add ~/.ssh/id_rsa_snow
$ ssh-add -l
  4096 SHA256:Ky5cNi8JKMUuguV0Snt4epmwFn2MgAk19nzF3MJujWU 
  /Users/'username'/.ssh/id_rsa_helen (RSA)
  4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
  /Users/'username'/.ssh/id_rsa_snow (RSA)

5, я создал проект приложения реагирования и хочу отправить его в репозиторий gitHub (для учетной записи 'Snowbabe').

$ git init
$ git remote add origin git@github.com:Snowbabe/React-study.git

6, вот мой .git / config

[remote "origin"]
       url = git@github.com:Snowbabe/React-study.git
       fetch = +refs/heads/*:refs/remotes/origin/*

это правильный URL

7, наконец, шаг

$ git push -u origin master
  ERROR: Permission to Snowbabe/React-study.git denied to HelenZeng.
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights

Попробуйте решить:

$ ssh-add -l
 4096 SHA256:Ky5cNi8JKMUuguV0Snt4epmwFn2MgAk19nzF3MJujWU 
 /Users/'username'/.ssh/id_rsa_helen (RSA)
 4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
 /Users/'username'/.ssh/id_rsa_snow (RSA)

/** delete all **/
$ ssh-add -D
 All identities removed.

/** just ssh-add id_rsa_snow **/
$ ssh-add ~/.ssh/id_rsa_snow
$ ssh-add -l
 4096 SHA256:hMfQyemWSz+f+AHrmsbZdhrDb11U+wA4xXeG3X1u28E 
 /Users/yaxian/.ssh/id_rsa_snow (RSA)

Теперь выполните git push -Мастер происхождения '

$ git push -u origin master
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (18/18), 165.52 KiB | 0 bytes/s, done.
Total 18 (delta 0), reused 0 (delta 0)
To github.com:Snowbabe/React-study.git
 * [new branch]      master -> master

Успешно.

1 Ответ

2 голосов
/ 27 марта 2019

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

Почему ssh-add работает так, как работает

ssh-add используется для загрузки определенных идентификаторов в ваш агент ssh. У вас есть несколько удостоверений, и ваш ssh-агент предложит их любому серверу, к которому вы пытаетесь подключиться, в порядке, который я до конца не понимаю.

В типичных условиях данный сервер может принять только одну из ваших идентификационных данных. Например, допустим, я добавил id_rsa_server1 для подключения к host1 и id_rsa_server2 для подключения к host2. Когда я подключаюсь к host1, ssh предлагает id_rsa_server1 серверу и успешно подключается. Когда я подключаюсь к host2, ssh сначала предлагает id_rsa_server1, который завершается неудачей, а затем пробует следующий, is_rsa_server2, который теперь завершается успешно.

Ваша проблема при загрузке двух идентификаторов заключается в том, что github.com знает и Хелен, и Сноу. Вы хотите войти в систему со снегом, так как это учетная запись, у которой есть разрешения для этого конкретного репо, но слой ssh ​​успешно работает с первым принятым ключом, helen, у которого нет необходимых разрешений.

Поэтому, когда вы выгружаете свои идентификационные данные и загружаете только нужную, все работает, потому что на этот раз вы входите в github.com как снег, с необходимыми разрешениями для выполнения push.

Надеюсь, это поможет прояснить, что происходит.

Альтернативное и рекомендуемое решение с .ssh/config

Поскольку вы подключаетесь к github.com с таким именем, я думаю, что ваш .ssh/config ничего не делает. Он будет работать только в том случае, если вы подключитесь к github.com-Snowbabe в качестве имени сервера.

Это должно работать:

.ssh/config с пользователем = git:

Host github.com-Snowbabe
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_snow

настройте Git-репо на использование этого удаленного имени:

git remote set-url origin github.com-Snowbabe/React-study.git

С этими настройками ваш агент ssh будет использовать правильный файл идентификации при использовании этого имени хоста: псевдоним, определенный в .ssh/config, указывает имя пользователя (всегда должно быть git на github.com) и идентификатор (Snowa RSA) ключ). Вам все еще нужно ssh-add id_rsa_snow, как и раньше, но эта конфигурация переопределяет то, что удостоверение личности предлагается первым при подключении через ssh.

Редактировать: Теперь я хорошо протестировал эту процедуру в контексте ответа на аналогичный вопрос и исправил некоторые ошибки, описанные выше в процессе.

...