Ansible task-клонирование частного git без пересылки SSH
Я пытаюсь создать Ansible playbook, который будет запускаться с наших компьютеров dev team и с серверов CI/CD.
одна из задач в playbook-получить исходный код нашего проекта из частного репозитория git. Поскольку playbook должен работать с серверов CI/CD, мы не можем использовать пересылку SSH.
то, что я придумал, - это скопировать необходимый закрытый ключ SSH на удаленную хост-машину, а затем с помощью ключа клонировать код из частного git хранилище.
однако при попытке этого задача клонирования зависает. При попытке запустить команду вручную запрашивает пароль для закрытого ключа SSH. Ключ SSH не использует парольную фразу (пустой).
может ли кто-нибудь поделиться своим решением этой (вероятно, очень распространенной) проблемы?
в случае необходимости, это мой текущий playbook:
- name: Create SSH directory
file: path=/root/.ssh state=directory
- name: Copy SHH key for Git access
copy:
content: "{{ git_ssh_key }}"
dest: /root/.ssh/id_rsa
owner: root
group: root
mode: 0600
# Also tried this, but it also hangs
#- name: Start SSH agent and add SSH key
# shell: eval `ssh-agent -s` && ssh-add
- name: Get new source from GIT
git:
key_file: /root/.ssh/id_rsa
repo: "git@gitlab.com:user/repo.git"
dest: "{{ staging_dir }}"
depth: 1
accept_hostkey: yes
clone: yes
Я использую ansible 2.3.1.0, python version = 2.7.12
2 ответов
вот шаги, чтобы заставить его работать (протестировано с Ansible 2.3.1 и Python 2.7.10 на MacOS, Ubuntu LTS):
создать новую пару ключей SSH без парольной фразы
ssh-keygen -f my_ssh_key -N ''
.-
добавить
my_ssh_key.pub
в ваш профиль пользователя сервера репозитория- GitLab -https://gitlab.com/profile/keys
- Github -https://github.com/settings/keys
Я думаю, проблема в том, что для автоматизированной задачи git не использует ключ ssh. Я прочитал (оглядываясь в течение нескольких минут), что с git 2.10 вы можете предоставить ssh-материал для передачи при вызове git.... поэтому, я думаю, вы можете попробовать что-то вроде:
git -c core.sshCommand='ssh -i /path/to/private/key' fetch origin
или любая другая команда, которую вы хотели бы использовать. Вы также можете исправить это в настройках:
git config core.sshCommand 'ssh -i /path/to/private/key'
в любом случае, надеюсь, что помогает немного
укажите закрытый SSH-ключ для использования при выполнении команды shell с Ruby или без Ruby?