Конфигурация SSH (~/.ssh/config) - расширенная конфигурация
ОБНОВЛЕНИЕ: Просто, чтобы подтвердить больше о моей настройке на случай, если неясно:
Никакие закрытые ключи никогда не передаются нигде.
(1) Каждый программист, использующий Mac, имеет один SSH-ключ (в ~/.ssh/id_rsa), который они используют для подключения ко всем моим репозиториям BitBucket (одна учетная запись компании). Элемент открытого ключа помещается в BitBucket для их авторизации, и это подтверждает, что один человек для всех моих репозиториев BitBucket.
(2) Каждый из серверов Ubuntu имеет собственную настройку пары ключей и по одному SSH-ключу для каждого репозитория BitBucket, на который они утверждены. Каждый открытый ключ помещается в каждый из соответствующих репозиториев BitBucket.
По сути, я пытаюсь заставить один файл composer.json (который использует формат URL, показанный ниже) работать как для людей, так и для серверов (то есть для работы, когда у человека есть один ключ SSH для доступа ко всем моим хранилищам BitBucket (той же учетной записи) -AND- когда сервер имеет отдельные ключи 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, когда она будет правильной, но проигнорирую (просто нажимая ввод), если она не верна.
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
2 ответа
Если я правильно понимаю, у каждого репозитория есть свой ключ author_key, частная половина каждого такого ключа распределяется среди множества пользователей, которые должны иметь доступ к этому репозиторию?
Если это так, то ваша проблема вызвана принципиально неправильной настройкой на стороне сервера. Ключи аутентифицируют пользователей, и пользователи имеют право делать определенные вещи; ключ не должен использоваться для прямого подтверждения авторизации.
Модель должна быть "один ключ на пользователя, ключ каждого пользователя появляется во многих репо", а не "один ключ на репо, ключ каждого репо, общий для многих пользователей". Это потому, что кто-то мучает sshd
на стороне сервера, что вы не можете найти простой способ решить эту проблему на стороне клиента.
Я надеюсь, что я ошибаюсь и у кого-то есть лучшее предложение, но если они этого не делают, это фундаментальное неправильное использование sshd
модель аутентификации, которая вызывает проблему.
Редактировать: ОК, ваши разъяснения помогают, но вы все еще мучаете модель. Сервер Ubuntu - это не отдельная от пользователя вещь, которая может действовать самостоятельно; процесс, который выполняется на серверах Ubuntu, все еще будет работать с определенным UID.
UNIX, как правило, не проводит различий между действиями, совершаемыми пользователем в интерактивном режиме, и действиями, выполняемыми от его / ее имени в его / ее отсутствие, и, пытаясь сделать это, вы создаете проблемы (из правила есть ряд исключений), лайк sudo
, но даже тогда исключения часто возвращаются к правилу, например, Default !requiretty
а также NOPASSWD
пункты, для неинтерактивного использования, имитирующего интерактив).
Рассматривайте UID, который запускает неинтерактивный процесс, как если бы это был человек, у которого также есть одна пара ключей, общедоступная половина которой используется везде, где UID процесса разрешено использовать, и проблемы исчезнут.
Если есть веская деловая причина, почему вы не можете сделать это, сейчас самое время рассказать нам.
Конфигурация SSH не заботится о путях каталогов на каждом имени хоста. Это касается только имен хостов и их закрытых ключей, используемых для конкретных хостов.
Таким образом, вы не можете достичь того, что вы хотите, используя один файл конфигурации.
Вы должны быть в состоянии использовать отдельный SSH config
файл для каждого репозитория, а потом как-то подсказать git
использовать этот файл конфигурации с SSH. Однако я не знаю, можно ли указать параметр файла конфигурации SSH с помощью git
,