Как поддерживать несколько учетных записей Bitbucket с несколькими ключами ssh в одной системе
У меня есть несколько учетных записей Git, одна для моего личного пользования, а другая для использования в компании. Обе учетные записи источника должны быть активированы с моего ноутбука. Здесь я сгенерировал два ключа ssh, таких как id_rsa.pub, id_benwork_rsa.pub и настроил конфигурацию git как
Host sfsworkdid
HostName bitbucket.org
IdentityFile ~/.ssh/id_rsa
Host workdid
HostName bitbucket.org
IdentityFile ~/.ssh/id_benwork_rsa
Итак, вот моя проблема: при нажатии на любой репозиторий git запрашивает первую парольную фразу ssh_key. Каждый раз, когда я меняю user.name в git config как git config user.name "mybitbucketusername". Поэтому, пожалуйста, скажите мне, как поддерживать несколько учетных записей git с несколькими ключами SSH в одной системе
Я пытался, как работать с несколькими ключами SSH, несколько учетных записей Bitbucket, но бесполезно
push с использованием нескольких учетных записей/нескольких идентификаторов в github/bitbucket несколько полезно для достижения до сих пор
Ответы
Ответ 1
Создайте несколько идентификаторов для Mac OSX, GitBash и Linux
В этот момент вы должны создать хотя бы один идентификатор по умолчанию. Чтобы узнать, есть ли у вас идентификатор по умолчанию, перечислите содержимое своего каталога .ssh. Файлы идентификации по умолчанию отображаются как пара id_encrypt и id_encrypt.pub. Значение шифрования - rsa или dsa. Используйте команду ssh-keygen для создания нового идентификатора. В приведенном ниже примере идентификатор называется персонализированным.
$ ssh-keygen -f ~/.ssh/personalid -C "personalid"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/manthony/.ssh/personalid.
Your public key has been saved in /Users/manthony/.ssh/personalid.pub.
The key fingerprint is:
7a:9c:b2:9c:8e:4e:f4:af:de:70:77:b9:52:fd:44:97 personalid
The key randomart image is:
+--[ RSA 2048]----+
| |
| |
| .|
| Eo|
| . S . ..|
| . . o . ... .|
| . = = ..o o |
| . o X ... . .|
| .ooB.o .. |
+-----------------+
Если у вас несколько учетных записей Bitbucket, вам нужно создать новую пару открытых/закрытых ключей для каждой учетной записи.
Создать конфигурационный файл SSH
Когда у вас есть несколько файлов идентификаторов, создайте механизмы файла конфигурации SSH для создания псевдонимов для разных идентификаторов. Вы можете создать конфигурационный файл SSH, используя множество параметров и различные подходы. Формат для записей псевдонимов, используемых в этом примере:
Host alias
HostName bitbucket.org
IdentityFile ~/.ssh/identity
Чтобы создать файл конфигурации для двух идентификаторов (workid и personalid), вы должны сделать следующее:
- Откройте окно терминала.
- Отредактируйте файл ~/.ssh/config. Если вы не
создать файл конфигурации, создать его.
-
Добавьте псевдоним для каждого идентификатора
комбинация, например:
Host workid
HostName bitbucket.org
IdentityFile ~/.ssh/workid
Host personalid
HostName bitbucket.org
IdentityFile ~/.ssh/personalid
-
Закройте и сохраните файл.
Теперь вы можете подставить псевдоним для частей URL-адреса репозитория, как показано ниже:
[email protected]:accountname/reponame.git -> [email protected]:accountname/reponame.git
Загрузите каждый ключ в соответствующую учетную запись Bitbucket
![введите описание изображения здесь]()
Убедитесь, что ssh-agent запущен и загружен вашими клавишами
![введите описание изображения здесь]()
Клонирование репозитория с использованием SSH и вашей конфигурации псевдонима
Чтобы клонировать репозиторий с одним из нескольких идентификаторов SSH, которые вы настроили, вы клонируете репо и используете свой псевдоним в URL-адресе SSH. Чтобы попробовать это для себя, войдите в Bitbucket и выполните следующие действия:
- Перейдите к обзору репозитория.
- Отобразить URL-адрес SSH.
Например, ssh URL как:
git @bitbucket.org: AccountName/reponame.git
затем клонировать хранилище, используя:
git clone git @ персонализированный: accountname/reponame.git
Это относится к официальному решению Настроить несколько идентификаторов SSH для GitBash, Mac OSX и Linux, он отлично работает для меня!
Ответ 2
Альтернативой вышеописанному методу ~/.ssh/config
является указание переменной конфигурации core.sshCommand
в самой команде клонирования. Например,
git clone --config core.sshCommand='ssh -i/home/username/.ssh/id_ed25519' [email protected]:the_best/awesome_repo.git
Это установит значение конфигурации локального репозитория и сделает последующие команды push/pull "просто работающими".
$ git config --local --get core.sshCommand
ssh -i/home/username/.ssh/id_ed25519
Это поддерживается в версиях git версии 2.10 и более поздних версий.
Ответ 3
Если вы получили сообщение "ssh: Не удалось разрешить имя хоста: имя или услуга неизвестно", может оказаться полезным следующее.
Как указано в ответе Шеннон Чжоу, вы хотите создать SSH псевдонимы. GitHub, BitBucket и т.д. Имеют инструкции о том, как это сделать, но я столкнулся с одной проблемой в Windows 10, которая может помочь другим. SSH имеет два разных файла конфигурации: общесистемный конфигурационный файл и пользовательский конфигурационный файл. В инструкциях, которые я прочитал, включая Shannon Chou's, все говорят, чтобы добавить псевдонимы в конфигурационный файл для пользователя, который находится в ~/.ssh/.config
В моем случае мне нужно было добавить псевдонимы в системный файл конфигурации, который при использовании Git в Windows 10 обычно находится здесь: C:\Program Files\Git\etc\ssh\ssh_config, в каталоге Git.
Вы можете определить, какой конфигурационный файл SSH использует, выполнив эту команду, "myalias" может быть любой строкой "все, что нас интересует, это путь к файлу конфигурации, который будет выводиться:
ssh -vv myalias
OpenSSH_7.1p2, OpenSSL 1.0.2d 9 Jul 2015
debug1: Reading configuration data /etc/ssh/ssh_config
Обратите внимание, что в выходном файле указан путь к файлу "/etc/ssh/ssh_config". Это говорит нам о том, что SSH ищет псевдонимы там, а не в файле ~/.ssh/.config.
Ответ 4
ПЕРЕДНЕЕ РЕДАКТИРОВАНИЕ: Похоже, что Bitbucket прекратил поддержку механизма, описанного ниже. На сегодняшний день я использую решение @shannon-chou выше, и оно работает просто отлично. Остаток сообщения оставлен здесь для исторической справки. --JBC, 2019-06-23
В 2016 году, похоже, в BitBucket добавлена поддержка несколько более простого решения, которое не требует дополнительного слияния с файлом конфигурации .ssh. В частности, теперь можно использовать имя пользователя ssh, чтобы указать, к какой учетной записи вы обращаетесь. Например, вместо использования git url
[email protected]: efhutton/squanzle.git
Вы можете использовать Git URL
[email protected]: efhutton/squanze.git
(или ssh://[email protected]/efhutton/squanze.git, что выглядит эквивалентно)
Основная проблема заключается в том, что ваш ssh-клиент будет представлять идентификаторы ssh-ключей в фиксированном порядке. Допустим, ваша рабочая учетная запись называется bobobogo, а ваша личная - efhutton, а ваш ssh-клиент настроен для того, чтобы сначала предлагать ключ, зарегистрированный в bobobogo. Если, например, вы пытаетесь получить доступ к учетной записи, связанной с efhutton, то ваш ssh-клиент предлагает ключ bobobogo, bitbucket принимает его, а затем замечает, что учетная запись bobobogo не имеет доступа к репозиторию efhutton/squanze, и блокирует вас Используя новый механизм, вы сообщаете bitbucket, что хотите использовать ключ, авторизованный для учетной записи efhutton, и поэтому, когда ваш ssh-клиент представляет ключ, зарегистрированный для bobobogo, bitbucket выключает его, а ваш ssh-клиент может представить следующее ключ, который зарегистрирован в учетной записи efhutton.
Подробности в этом блоге
https://bitbucket.org/blog/better-support-multiple-ssh-keys
РЕДАКТИРОВАТЬ: вы видели сообщение в верхней части, верно?
Ответ 5
В случае, если другие комментарии не работают, вот что я сделал для своих учетных записей bitbucket.
Host *
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
Host nameOfSSH-Bitbucket bitbucket.org
HostName bitbucket.org
User myBITBUCKETUserName
IdentityFile /Users/luisconstante/.ssh/nameOfSSH-Bitbucket
Host nameOf2ndSSH-Bitbucket bitbucket.org
HostName bitbucket.org
User myBITBUCKET2ndUserName
IdentityFile /Users/luisconstante/.ssh/nameOf2ndSSH-Bitbucket
git remote add origin [email protected]:mybitbucketteam/my-cool-app.git
git remote add origin [email protected]:mybitbucketteam/my-cool-app2.git
если вы не хотите каждый раз вводить вашу фразу-пароль (это может быть небезопасно), вы можете создать новый ключ ssh, оставив запрос пароля пустым.
Я пробовал UseKeychain yes
но это не удалось. Это то, что сработало для меня.
Дайте мне знать, если я что-то упустил, это дополняет другие комментарии.
2019
Ответ 6
Отредактируйте файл ~/.ssh/config следующим образом!
Host bitbucket.org-yourusername
HostName bitbucket.org
User yourusername
IdentityFile ~/.ssh/yoursshkey
IdentitiesOnly yes
И измените свой удаленный URL-адрес git, указав свое имя пользователя до @bitbucket.org, например
git remote add origin [email protected]:company/app.git