Я думаю, вы хотите знать, что делает 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.
Редактировать: Теперь я хорошо протестировал эту процедуру в контексте ответа на аналогичный вопрос и исправил некоторые ошибки, описанные выше в процессе.