web-dev-qa-db-ja.com

Ansibleタスク-SSH転送なしでプライベートGitのクローンを作成する

開発チームのコンピューターとCI/CDサーバーから実行されるAnsibleプレイブックを作成しようとしています。

プレイブックのタスクの1つは、プライベートgitリポジトリからプロジェクトのソースコードを取得することです。プレイブックはCI/CDサーバーから実行する必要があるため、SSH転送を使用できません。

私が思いついたのは、必要なSSH秘密鍵をリモートホストマシンにコピーし、その鍵を使用して秘密gitリポジトリからコードを複製することです。

ただし、これを試行すると、クローン作成タスクがハングします。コマンドを手動で起動しようとすると、SSH秘密鍵のパスフレーズが要求されます。 SSHキーはパスフレーズを使用しません(空白)。

誰かがこの(おそらく非常に一般的な)問題の解決策を共有できますか?

誰かが必要とする場合に備えて、これは私の現在のプレイブックです:

- 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: "[email protected]:user/repo.git"
    dest: "{{ staging_dir }}"
    depth: 1
    accept_hostkey: yes
    clone: yes

私は使っている ansible 2.3.1.0, python version = 2.7.12

12

これを機能させる手順は次のとおりです(Ansible2.3.1およびPython 2.7.10でテスト済み):

  1. パスフレーズなしで新しいSSHキーペアを生成しますssh-keygen -f my_ssh_key -N ''

  2. 追加 my_ssh_key.pubリポジトリサーバーのユーザープロファイルに

  3. 次のプレイブックでテストします。

_

---
- hosts: localhost
  gather_facts: no
  vars:
    git_ssh_public_key: "Your public ssh key"
    git_ssh_key: |
              -----BEGIN RSA PRIVATE KEY-----
              .... actual key here ....
              -----END RSA PRIVATE KEY-----
  tasks:
  - name: Copy SSH public key file
    copy: 
      content: "{{ git_ssh_public_key }}"
      dest: /root/.ssh/id_rsa.pub
      mode: 0644

  - name: Copy SSH private key file
    copy: 
      content: "{{ git_ssh_key }}"
      #src: id_rsa
      dest: /root/.ssh/id_rsa
      mode: 0600

  - name: Get new source from GIT
    git: 
      repo: "[email protected]:user/repo.git"
      dest: "/var/www/"
      depth: 1
      accept_hostkey: yes
      clone: yes

重要なセキュリティ通知

この例を実際に使用する場合は、秘密鍵をプレーンテキストで保存しないでください-use Ansible Vault

また、[〜#〜] not [〜#〜]rootをansibleユーザーとして使用する必要があります。 Sudo権限なしで新しいユーザーを作成する方が安全です。

6

問題は、自動化されたタスクの場合、gitがsshキーを使用していないことだと思います。私は(数分間見回して)git 2.10を使用すると、gitを呼び出すときに渡すsshのものを提供できることを読みました。したがって、次のようなことを試すことができると思います。

git -c core.sshCommand='ssh -i /path/to/private/key' fetch Origin

または、使用したい他のコマンド。構成で修正することもできます。

git config core.sshCommand 'ssh -i /path/to/private/key'

とにかく、それが少し役立つことを願っています

Rubyの有無にかかわらずシェルコマンドを実行するときに使用するプライベートSSHキーを指定しますか?

0
eftshift0