Конфигурация 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,

Другие вопросы по тегам