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):

  1. создать новую пару ключей SSH без парольной фразы ssh-keygen -f my_ssh_key -N ''.

  2. добавить my_ssh_key.pub в ваш профиль пользователя сервера репозитория


Я думаю, проблема в том, что для автоматизированной задачи 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?