Назад | Перейти на главную страницу

Конфигурация SSH (~ / .ssh / config) - расширенная конфигурация

ОБНОВЛЕНИЕ: просто чтобы больше узнать о моей настройке, если она не была ясна:

Никакие личные ключи никогда нигде не передаются.

(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.