Я использую vcsrepo puppet модуль для синхронизации репозиториев git.
# install git repo
vcsrepo { "/home/repo":
ensure => present,
provider => git,
source => "git@bitbucket.org:pk2klic/test.git",
}
Он работает на главном сервере, где я сделал ключ RSA и загрузил открытый ключ в битбакет.
У меня много узлов агентов, поэтому было бы нецелесообразно вручную загружать ключи для каждого узла.
Есть ли обходной путь для этого, когда я могу использовать главный ключ ssh для клонирования при применении моего файла марионетки? Или мне лучше попытаться создать автоматизированный процесс для создания новых ключей на каждом узле?
В идеале вам нужно создавать новые ключи для каждого узла. В этом весь смысл аутентификации SSH на основе ключей.
Если один сервер скомпрометирован, вы можете просто перестать доверять этому конкретному ключу, заменить его и двигаться дальше.
Теперь, если ты действительно хотите сделать это так, как вы предлагаете, с одним ключом, тогда вам нужно будет убедиться, что закрытый ключ находится на каждом хосте. Я оставлю это упражнение, чтобы вы поняли, как это сделать.
Затем вы настроите ~/.ssh/config
чтобы указать ключ, который вы хотите использовать при доступе к этому репозиторию. Вы можете сделать что-то вроде:
Конфигурация вашей марионетки:
# install git repo
vcsrepo { "/home/repo":
ensure => present,
provider => git,
source => "git@bitbucket:pk2klic/test.git",
}
И ~/.ssh/config
:
Host bitbucket
Hostname bitbucket.org
IdentityFile ~/.ssh/id_rsa-bitbucket
IdentitiesOnly yes
Обратите внимание на изменение, которое я внес здесь в репозиторий git. Я использую псевдоним bitbucket
вместо настоящего имени хоста. Настоящее имя хоста задается в .ssh/config
файл. Я предполагаю, что вы поместили свой общий закрытый ключ в ~/.ssh/id_rsa-bitbucket
Таким образом, если пользователь просто нажимает / вытягивает это репо, он будет использовать конкретный ключ, но если они хотят клонировать свои личные данные из BitBucket, они могут просто использовать настоящие git@bitbucket.org:example/example.git
, и он будет просто использовать их личный SSH-ключ (как обычно).