У меня есть ключи SSH на месте, внутри ~/.ssh
. Многие из них на самом деле. Поэтому мне интересно, как git
знает, какой из них следует предпринять, когда он пытается подключиться к репозиторию через конечную точку [email protected]:group/repo.git
?Как git знает, какой ключ ssh использовать для своих операций?
ответ
Git не знает или не заботится. Он просто запускает ssh.
Как знать ssh? Он смотрит на свой ~/.ssh/config
файл (редактировать: или получает его от SSH-агента, смотрите ниже):
Host github.com
# IdentitiesOnly yes # see below to decide if you want this
IdentityFile ~/.ssh/github_id_file
Host domain.com
IdentitiesOnly yes # again, see below
IdentityFile ~/.ssh/another_id_file
Edit: вот ссылка на a Linux version of the ssh_config documentation. Хотя каждая система (MacOS, Linux, различные BSD, даже порты Windows) имеет свой собственный вкус конфигурации ssh, все они разделяют большинство этих конфигураций. Обратите внимание, эти два элемента, в частности (я скорректировали форматирование немного для StackOverflow уценки):
IdentitiesOnly
Указывает, что SSH (1) следует использовать только в идентификатор аутентификации файлы сконфигурированы в файлах ssh_config, даже если ssh-agent (1) или a PKCS11Provider предлагает больше идентификационных данных. Аргументом к этому ключевому слову должно быть «да» или «нет». Этот параметр предназначен для ситуаций, когда ssh-agent предлагает множество разных идентификаторов. Значение по умолчанию «нет» - .
IdentityFile
Определяет файл, из которого считывается удостоверение подлинности DSA, ECDSA, ED25519 или RSA пользователя. По умолчанию
~/.ssh/identity
для протокола версии 1, и~/.ssh/id_dsa
,~/.ssh/id_ecdsa
,~/.ssh/id_ed25519
и~/.ssh/id_rsa
для протокола версии 2. Кроме того, любые тождества, представленные агентом аутентификации будет использоваться для проверки подлинности, еслиIdentitiesOnly
не множество. ssh (1) попытается загрузить информацию сертификата из файла , полученного путем добавления -cert.pub к пути , указанномуIdentityFile
.Имя файла может использовать тильды синтаксиса для обозначения домашнего каталога пользователя или один из следующих символов эвакуационных: «% d» (местный домашнего каталога пользователя), «% и» (локальное имя пользователя), «% l» (локальный хост ), «% h» (имя удаленного хоста) или «% r» (имя удаленного пользователя).
Можно иметь несколько файлов удостоверений, указанных в файлах конфигурации; все эти тождества будут проверяться последовательно. Несколько Указатели IdentityFile добавят к списку идентификаторов (это поведение отличается от других настроек ).
IdentityFile может быть использован в сочетании с IdentitiesOnly, чтобы выбрать, какие тождества в качестве агента предлагаются во время аутентификации.
В Alexey Ten noted in a comment, IdentityFile
свойствен тем, что она является аддитивной (а не один-настройка-переопределяет-другой).
Вы также можете запустить ssh (вручную) с дополнительными параметрами -v
для отслеживания соединения. В Git вы можете установить GIT_SSH
на имя сценария, который запускает ssh -vvv
для временной трассировки (или суеты с уровнем журнала в вашем файле ~/.ssh/config
). Я нашел это полезным для отладки. (Обратите внимание, что вы не можете передать параметры SSH через GIT_SSH
, вам нужен скрипт один строки, такие как ssh-vvv
с одной линии чтения ssh -vvv [email protected]
.)
- 1. GIT и SSH, какой ключ используется?
- 2. SSH ключ, но только для доступа git
- 3. git push через ssh и кто знает закрытый ключ?
- 4. Какой открытый ключ ssh использовался для подключения к git
- 5. Как использовать ключ SSH для проектов Bitbucket?
- 6. Windows Git - настроен ключ SSH
- 7. Git: какой ключ использовать (может быть, не по умолчанию)?
- 8. Как мое приложение знает, какой секретный ключ использовать
- 9. Как указать ppk для операций синхронизации Git?
- 10. Git SSH публичный ключ отказано
- 11. Git SSH ключ для АМС OPS РАБОТЫ
- 12. Git SSH ключ не найден
- 13. Git Нажмите и SSH ключ
- 14. Как API Bouncy Castle знает, какой ключ для шифрования?
- 15. MacOS Terminal: как использовать ключ sccond ssh?
- 16. Как git знает, кто я, когда я использую ssh для входа?
- 17. Измените ключ .ssh, используемый git на окнах
- 18. Как PrincipalContext знает, какой сервер LDAP использовать
- 19. Как веб-ссылка знает, какой адрес использовать?
- 20. Как java знает, какой индекс использовать
- 21. как keytool знает, какой CA использовать
- 22. Как использовать git с ssh на bitbucket
- 23. Может быть удален закрытый ключ git ssh?
- 24. Как сервер rails знает, какой route.rb использовать?
- 25. Как весна знает, какой пул подключений использовать?
- 26. Как настроить ключ ssh для обхода запроса пароля git bash
- 27. Как добавить ключ ssh для подключения к git?
- 28. Как C++ знает, какой атрибут использовать
- 29. Настроить ssh-ключ на git repo
- 30. Как выбрать, какой ключ подписать git push?
И в случае, если у вас нет явного отображения, SSH просто пытается их все –
I похоже, нет файла ~/.ssh/config. Если вы обновите свой ответ на случай и, возможно, ссылку на ресурс о том, как создать такой файл (который, как я вижу, мне нужен), я соглашусь с этим. – jayarjo
Проблема, которая заставляла меня задавать этот вопрос, заключалась в том, что, хотя у меня было много ключей в .ssh, и по крайней мере три из них были определены в моем профиле gitlab, был только один, который позволил мне пройти. Поэтому я задавался вопросом, почему это предпочтение. – jayarjo