2014-10-07 2 views
1

У меня есть две учетные записи битбакет и ключи ssh для соответствия. Я видел manysolutions до manage, используя несколько ключей на одном хосте с помощью наложения псевдонимов, но, к сожалению, мне нужны мои ссылки на git.Использование нескольких ключей ssh ​​для одного и того же хоста без использования псевдонима

Причина, по которой мне нужно, чтобы они были распространены, заключается в том, что я работаю над совместными проектами с Pods. Это означает, что отдаленный URL-адрес источника git должен быть одинаковым для всех разработчиков, работающих над проектами, но я не могу гарантировать, что каждый сможет настроить тот же псевдоним, что и я, и от них не следует ожидать.

Я попытался глупую попытку указать свои учетные записи пользователей, как так:

Host BitbucketA 
HostName bitbucket.org 
IdentityFile ~/.ssh/id_rsa 
User UserA 

Host BitbucketB 
HostName bitbucket.org 
IdentityFile ~/.ssh/id_rsa_userB 
User UserB 

Думая, что я мог бы указать использовать id_rsa_userB всякий раз, когда я пытаюсь получить доступ к одному из хранилищ USERB в. К сожалению, похоже, что это не так.

Есть ли способ выполнить то, что я хочу?

ответ

2

Вы действительно близки к решению, это по сути то, что я сделал, и он действительно работает. См. Мой ответ и ссылку ниже.

Вот как настроить мой SSH ключей для двух учетных записей на одном сервере на моем Mac:

Это необходимо, только если у вас есть логины на два отдельных счета на одной и той же Git удаленный репозиторий.

Создание двух ключей SSH:

$ ssh-keygen -t rsa -f id_rsa_account1 
$ ssh-keygen -t rsa -f id_rsa_account2 

Добавьте к этому ~/.ssh/config:

Host git_account1 
     User git 
     HostName git.xxxx.com 
     IdentityFile ~/.ssh/id_rsa_account1 
Host git_account2 
     User git 
     HostName git.xxxx.com 
     IdentityFile ~/.ssh/id_rsa_account2 

SSH переводит имя Host в HostName предваряя в User и выбирает IdentityFile. Это позволяет использовать два или более репозитория для одного и того же URL-адреса с разными сертификатами ssl.

Также см Nerderati: ~/.ssh/config & git

+1

Но ОП конкретно заявили, что они не хотят использовать псевдонимы, потому что тогда все в команде должны иметь одинаковую настройку в своих полях, то есть использовать 'git_account1' в URI репо. – kostix

+0

Итак, вы не согласны с последним предложением: «ssh переводит имя« Host »в« HostName », добавляя« User »и выбирает ssh« IdentityFile ». Позволяет два или более репозитория для одного и того же URL-адреса с разными сертификатами ssl. " Или я чего-то не хватает? – zaph

+0

Нет, я определенно согласен с этим. Но когда я прочитал оригинальный вопрос, все дело в том, чтобы спросить, как не иметь * разных хостов * (с псевдонимом или нет) в URI, потому что это потребует, чтобы все участники команды имели одну и ту же настройку SSH. Проблема с моим ответом заключается в том, что он также требует установки ящиков для разработчиков. К сожалению, эта проблема не имеет никакого решения. – kostix

0

Вы можете прибегнуть к помощи пары скриптов оболочки, и переменная окружения:

$ cat >~/bin/ssh-acct-one 
#!/bin/sh 
exec /usr/bin/ssh -i ~/.ssh/id_rsa_account1 [email protected] 
^D 
$ chmod +x $_ 
$ GIT_SSH=ssh-acct-one git clone ssh://[email protected]/... 

& hellip; и то же самое для второго файла идентичности. (Вызов по последней строке предполагает, что у вас есть ~/bin на $PATH).

Причина этого неуклюжесть в том, что Git передает $GIT_SSH непосредственно на exec(), а не на /bin/sh -c или тому подобное, поэтому никаких расширений оболочки оболочки не выполняются.

При отладке, вы можете также использовать GIT_TRACE=1, чтобы Git показать вам, что выполняется и изменить сценарии passng -vvv для ssh, чтобы сделать этот отчет, что делается (в том числе и то, что ключевой (файл идентичности) он использует).

Смежные вопросы