Как поддерживать несколько учетных записей 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