2017-07-07 41 views
8

我想創建一個Ansible操作手冊,它將從我們的開發團隊計算機和CI/CD服務器運行。Ansible任務 - 無需SSH轉發克隆私人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

+0

「*當試圖手動啓動命令時,它會要求輸入SSH私鑰的密碼*」 - 這是一個編程問題? – techraf

+0

我需要一種方法來編寫一個任務來輸入密碼(編程問題)或一個不同的方法,我根本不需要輸入它(操作問題)。 –

+0

使用沒有密碼的密鑰。 – techraf

回答

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到你的資料庫服務器的用戶配置文件

  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 

重要的安全通告

如果你想在現實世界中使用示例,請不要保存私鑰明文 - 使用Ansible Vault

你也應該不是使用root作爲你的用戶。創建沒有sudo權限的新用戶會更安全。

+0

這對我仍然不起作用。當試圖'''git fetch'''它仍然要求輸入密碼'''輸入密碼'/root/.ssh/id_rsa'的密碼短語:'''。也許有一些SSH配置參數會繞過密碼詢問它什麼時候是空的? –

+0

爲什麼'git fetch'?檢查一下可靠的'git'模塊。並確保提供的密鑰文件對您的回購服務器有效。 –

+0

在一個可靠的腳本中,我使用了默認的命令。但它無所事事。這就是爲什麼我手動連接到目標機器,並測試連接到我的私人回購的git命令。即使密鑰是在無密碼的情況下生成的,仍然會要求輸入密鑰(只需按Enter鍵)。 –

0

我想這個問題是,對於自動化任務,Git是不使用SSH密鑰。我讀過(由四處找一兩分鐘),與git的2.10,可以提供SSH的東西叫混帳時候傳球....所以我想你可以嘗試這樣的:

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

或者無論你想使用什麼其他命令。你也可以將其固定配置:

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

不管怎樣,希望幫助一點點

Specify private SSH-key to use when executing shell command with or without Ruby?

+0

我使用的是git v.1.7.1,所以這對我不起作用。 –