ОБНОВЛЕНИЕ: просто чтобы больше узнать о моей настройке, если она не была ясна:
Никакие личные ключи никогда нигде не передаются.
(1) Люди-программисты, использующие Mac, имеют по одному SSH-ключу (в ~ / .ssh / id_rsa), который они используют для подключения ко всем моим репозиториям BitBucket (одна учетная запись компании). Элемент открытого ключа помещается в BitBucket для их авторизации, и это утверждает одного человека для всех моих репозиториев BitBucket.
(2) Каждый сервер Ubuntu имеет собственную настройку пары ключей и один SSH-ключ для каждого репозитория BitBucket, для которого они утверждены. Каждый открытый ключ помещается в каждый из соответствующих репозиториев BitBucket.
В основном я пытаюсь сделать так, чтобы один файл composer.json (который использует формат URL, показанный ниже) работал как для людей, так и для серверов (т.е. работал, когда у человека есть один SSH-ключ для доступа ко всем моим репозиториям BitBucket (одна и та же учетная запись) -И- когда у сервера есть отдельные ключи SSH для доступа к каждому репозиторию BitBucket, для которого он утвержден).
-
Мне нужно настроить мой файл ~ / .ssh / config для использования всех этих URL-адресов:
git@bitbucket.org:username/repository-abc.git
git@bitbucket.org:username/repository-12345.git
git@bitbucket.org:username/another-repo.git
... но я не могу использовать псевдоним.
Так что я НЕ МОГУ этого сделать:
git@alias1:username/repository-abc.git
git@alias2:username/repository-12345.git
git@alias3:username/another-repo.git
Причина в том, что URL-адреса должны находиться в файле composer.json, который также используется локальными компьютерами разработки, которые используют только один ключ SSH для всех репозиториев BitBucket - и не настроены для понимания всех различных псевдонимов.
Я могу настроить сервер так, как хочу, и у меня на сервере есть конфигурация ~ / .ssh / config ниже.
Всякий раз, когда он пытается прочитать файл закрытого ключа, который недействителен (например, 2-й / 3-й репозиторий попытается сначала прочитать первый), он потерпит неудачу. Однако это может сработать, если я выборочно введу ключевую фразу SSH, когда она правильная, но проигнорирую (просто нажав Enter), если она неправильная.
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/alias1_private_key
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/alias2_private_key
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/alias3_private_key
Было бы легко настроить псевдонимы, но поскольку компьютеры разработчиков этого не поймут, я застрял.
Есть ли способ сделать что-то ниже, чтобы это работало для всего?
Host bitbucket.org
HostName bitbucket.org
Url git@bitbucket.org:username/repository-abc.git
IdentityFile ~/.ssh/alias1_private_key
Host bitbucket.org
HostName bitbucket.org
Url git@bitbucket.org:username/repository-12345.git
IdentityFile ~/.ssh/alias2_private_key
Если я правильно понимаю, у каждого репозитория есть другой authorized_key, причем частная половина каждого такого ключа используется многими пользователями, которые должны иметь доступ к этому репозиторию?
Если да, то ваша проблема вызвана принципиально неправильной настройкой на стороне сервера. Ключи аутентифицируют пользователей, и пользователи имеют право делать определенные вещи; ключ не должен использоваться для прямого подтверждения авторизации.
Модель должна быть "один ключ на пользователя, каждый ключ пользователя появляется во многих репозиториях", а не"один ключ на репо, ключ каждого репо разделяется между многими пользователями". Это потому, что кто-то мучает sshd
на стороне сервера вы не можете найти простой способ решить эту проблему на стороне клиента.
Я надеюсь, что ошибаюсь и что у кого-то есть предложение получше, но если нет, то это фундаментальное неправильное использование sshd
модель аутентификации, которая вызывает проблему.
редактировать: ОК, ваше уточнение помогает, но вы все равно мучаете модель. Сервер Ubuntu - это не вещь, отдельная от пользователя, которая может действовать сама по себе; процесс, который выполняется на серверах Ubuntu, по-прежнему будет работать под определенным UID.
UNIX, как правило, не делает различий между действиями, выполняемыми пользователем в интерактивном режиме, и действиями, выполняемыми от его / ее имени в его / ее отсутствие, и, пытаясь таким образом различать, вы создаете себе проблемы (есть ряд исключений из правила , лайк sudo
, но даже тогда исключения часто возвращаются к правилу, например Default !requiretty
и NOPASSWD
пункты для неинтерактивного использования, имитирующего интерактивное).
Относитесь к UID, запускающему неинтерактивный процесс, как к человеку, у которого также есть одна пара ключей, публичная половина которой используется везде, где разрешен UID этого процесса, и проблемы исчезнут.
Если есть хорошая деловая причина почему вы не можете этого сделать, сейчас самое время рассказать нам.
Конфигурация SSH не заботится о путях к каталогам на каждом HostName. Он заботится только об именах хостов и закрытых ключах, используемых для конкретных хостов.
Таким образом, вы не можете добиться того, чего хотите, используя один файл конфигурации.
Вам нужно будет использовать отдельный SSH config
файл для каждого репозитория, а потом как-нибудь сказать git
чтобы использовать этот файл конфигурации с SSH. Однако я не знаю, можно ли указать параметр файла конфигурации SSH с помощью git
.