Использование нескольких открытых ключей SSH

у меня есть личный счет и счет компании на Unfuddle. На Unfuddle SSH ключи могут использоваться только на одной учетной записи, поэтому мне нужно создать отдельный ключ SSH на моем ноутбуке для обеих учетных записей. Я побежал ssh-keygen -t rsa сгенерировать два ключа с разными именами (personal-это имя по умолчанию, а company - {company}_rsa). Проблема теперь в том, что, похоже, мой ключ по умолчанию используется везде, и я не могу узнать, как указать ключ для использования в Git для отдельных репозиториев.

Так что мой вопрос: Как указать ключ SSH для использования на основе РЕПО-РЕПО?

Я настроил свой ssh_config (~ / .ssh / config), но он по-прежнему не работает.

config:

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

мой конфигурационный файл репозитория Git для репозитория в моей компании unfuddle выглядит так:

[remote "origin"]
     url = [email protected]{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

поэтому я не уверен, что что-то не так с моей конфигурацией ssh или моей конфигурацией git.

94
задан Dave Long 2011-04-18 17:26:44
источник

3 ответов

если у вас есть активный ssh-agent вашей id_rsa ключ загружен, значит проблема скорее всего в том, что ssh предлагает этот ключ первым. Unfuddle, вероятно, принимает его для аутентификации (например, в sshd), но отклоняет его для авторизации доступа к репозиториям компании (например, в любом внутреннем программном обеспечении, которое они используют для авторизации, возможно, что-то похожее на Gitolite). Возможно, есть способ добавить свой личный ключ в аккаунт компании (несколько человек не разделяют то же самое corp_rsa файлы открытого и закрытого ключей, да?).


IdentitiesOnly .ssh/config ключевое слово конфигурации может использоваться для ограничения ключей, которые ssh предложения к удаленному sshd только те, которые указаны с помощью IdentityFile keywords (т. е. он откажется использовать любые дополнительные ключи, которые случайно загружаются в активный ssh-agent).

попробуйте эти .ssh/config разделы:

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

затем используйте адреса Git, например:

[email protected]{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
[email protected]{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

если вы хотите в полной мере воспользоваться .ssh/config механизм, вы можете указать свое собственное имя хоста и изменить имя Пользователя по умолчанию:

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

затем используйте адреса Git, например:

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git
108
отвечен Chris Johnsen 2011-04-19 07:36:58
источник

man ssh_config

что-то вроде

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

и использовать personal_repo как хост в репозитории git.

3
отвечен Reactormonk 2011-04-18 18:05:03
источник

IdentityFile и IdentitiesOnly работают хорошо. Меня беспокоит то, что мне нужно помнить об использовании разных имен хостов для подключения, и тот факт, что перенаправленное соединение агента по-прежнему содержит все ключи, а это означает, что если удаленный хост скомпрометирован, они могут использовать любую мою личность, пока я нахожусь.

Я недавно начал использовать:

https://github.com/ccontavalli/ssh-ident

Это оболочка вокруг ssh, это:

  • сохраняет совершенно отдельный агент для каждого определенного удостоверения.
  • автоматически разделяет агентов на сеансах, не делать в вашей .bashrc.
  • загружает агент и соответствующие ключи по требованию при первой необходимости.
  • определяет, какой агент использовать на основе командной строки ssh (имя хоста и тому подобное) или текущего рабочего каталога. Это особенно удобно, поскольку я, как правило, работаю с разных путей в зависимости от того, что я делаю.
3
отвечен MarkMo 2013-03-15 10:56:03
источник

Другие вопросы git ssh-keys

X