У меня есть личный аккаунт и корпоративный аккаунт на Unfuddle. В разделе «Развернуть» ключи SSH могут использоваться только для одной учетной записи, поэтому мне нужно создать отдельный ключ SSH на моем ноутбуке для обеих учетных записей. Я побежал, ssh-keygen -t rsa
чтобы сгенерировать два ключа с разными именами (personal - это имя по умолчанию, а company - {company} _rsa). Проблема сейчас в том, что кажется, что мой ключ по умолчанию используется везде, и я не могу узнать, как указать ключ для использования в Git для отдельных репозиториев.
Итак, мой вопрос: как мне указать ключ SSH для использования в режиме репо-репо?
Я установил свой ssh_config (~ / .ssh / 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 для репо в учетной записи моей компании выглядит так:
[remote "origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/origin/*
Поэтому я не уверен, что что-то не так с моей конфигурацией ssh или моей конфигурацией git.
Ответы:
Если у вас есть активный ssh-agent , в который
id_rsa
загружен ваш ключ, проблема, вероятно, заключается в том, что ssh сначала предлагает этот ключ. Unfuddle, вероятно, принимает его для аутентификации (например, в sshd ), но отклоняет его для авторизации доступа к репозиториям компании (например, в любом внутреннем программном обеспечении, которое они используют для авторизации, возможно, в чем-то похожем на Gitolite). Возможно, есть способ добавить ваш личный ключ в корпоративную учетную запись (несколько человек не используют одниcorp_rsa
и те же файлы открытого и закрытого ключей, не так ли?).IdentitiesOnly
.ssh/config
Ключевое слово конфигурации может использоваться для ограничения ключи, SSH предложения на удаленный SSHD только те , которые указаны с помощьюIdentityFile
ключевых слов (т.е. он будет отказаться от использования каких - либо дополнительных клавиш , которые происходят для загрузки в активную SSH-агента ).Попробуйте эти
.ssh/config
разделы:Затем используйте URL-адреса Git, подобные этим:
Если вы хотите в полной мере воспользоваться этим
.ssh/config
механизмом, вы можете указать свое собственное имя хоста и изменить имя пользователя по умолчанию:Затем используйте URL-адреса Git, подобные этим:
источник
ssh-add -l
прежде чем использовать псевдоним хоста Git. Также должен присутствовать файл открытого ключа, чтобы ssh мог распознать ключ, который хранит ssh-agent . Вы можете восстановить потерянный.pub
файл с помощью команды, какssh-keygen -f blah -y > blah.pub
.man ssh_config
Что-то вроде
И использовать в
personal_repo
качестве хоста в вашем git-репо.источник
Host
это просто идентификатор - не нужно полное доменное имя. Это, вероятно, создает некоторые скрытые ошибки. Если вы измените это, вам не нужно указывать полное имя в вашем git config.IdentityFile и IdentitiesOnly работают хорошо. Что меня беспокоит, так это то, что я не забываю использовать разные имена хостов для подключения, и тот факт, что переадресованное соединение с агентом по-прежнему содержит все ключи, а это означает, что, если удаленный хост скомпрометирован, они могут использовать любые мои идентификационные данные, пока я нахожусь в ,
Я недавно начал использовать:
https://github.com/ccontavalli/ssh-ident
это обертка вокруг ssh, это:
источник
Вот правильный способ, если вы хотите использовать ssh agent:
Объяснение: если у вас есть закрытый ключ в каталоге ~ / .ssh, ssh-agent не будет использоваться. Поэтому мы создаем открытый ключ под другим именем, так что ssh вынужден использовать ssh-agent. Это также помогает, если у вас нет доступа к закрытым ключам (например, переадресация агента ssh)
источник
ssh-add -L
, нетssh-agent
.