2015-04-19 89 views
14

我一直試圖讓Ansible配置遠程機器,並且我希望遠程機器使用自己的密鑰進行設置,並且能夠克隆來自Bitbucket的git存儲庫。如何在安全的git模塊中使用遠程機器的SSH密鑰

用戶已設置,擁有自己的id_rsa.pub,並且密鑰已通過bitbucket註冊。

但是,當我使用Ansible Git模塊時,它看起來像模塊總是嘗試使用運行劇本的機器上的密鑰。

如何讓git模塊使用來自遠程機器的id_rsa.pub?

相關的任務是這樣的:

- name: be sure prom-king has an up-to-date clone of its own repository 
    git: 
    repo: "ssh://[email protected]/prom-king.git" 
    dest: /home/promking/prom-king 
    accept_hostkey: yes 
    clone: yes 
    key_file: /home/promking/.ssh/id_rsa.pub 
    update: yes 

相關的清單是這個

# inventory file for use with the vagrant box in the testing directory. 
[prom-king] 
192.168.168.192 ansible_ssh_host=127.0.0.1 ansible_sudo=true ansible_connection=ssh ansible_ssh_port=2222 ansible_ssh_user=vagrant ansible_ssh_private_key_file=testing/.vagrant/machines/default/virtualbox/private_key 
+0

忘了提...我能得到克隆一起工作https(但需要URL中的密碼,我想避免),並且在檢索到該克隆時,這些文件全部由遠程計算機上的根擁有 - 這也不是期望的。 – jschank

+0

粘貼到您正在使用的手冊中。當它在遠程計算機上運行時,它可能就是git提示將bitbucket添加到known_hosts(yes/no)提示符,它在第一次在新計算機上第一次運行時會執行的操作 – Zasz

+0

您如何知道git使用密鑰從你的playbook機器?除非您明確在127.0.0.1上運行或將其標記爲local_action或使用委派,否則所有可用的模塊都將在遠程計算機上運行。 – Zasz

回答

21

這是我從GitHub使用遠程服務器上設置的密鑰文件進行部署。如果keyfile參數git不工作,那麼什麼是錯的與你的劇本:

- name: Creates .ssh directory for root 
    sudo: yes 
    file: path=/root/.ssh state=directory 

# This public key is set on Github repo Settings under "Deploy keys" 
- name: Upload the private key used for Github cloning 
    sudo: yes 
    copy: src=keys/github dest=/root/.ssh/github 

- name: Correct SSH deploy key permissions 
    sudo: yes 
    file: dest=/root/.ssh/github mode=0600 

- name: Deploy site files from Github repository 
    sudo: yes 
    git: 
    repo: [email protected]:miohtama/foobar.git 
    dest: /srv/django/foobar 
    key_file: /root/.ssh/github 
    accept_hostkey: yes 
    force: yes 
+4

如果密鑰有密碼,它會掛起。 – Suvitruf

+0

使用'sudo'的方法現在顯示'[DEPRECATION WARNING]:而不是sudo/sudo_user,使用become/become_user並確保become_method是'sudo'(默認)'。 – halfer

+1

我發現用'become_user:root'交換'sudo:yes'對我來說工作正常,並刪除了棄用聲明。我已經在劇本開始的時候設置了'成爲'和'成爲'方法'。 – halfer

8

如果我理解正確的這個,你做的 - 或希望 - 部署您的私鑰到遠程機器,所以你可以克隆回購。我相信你應該使用密鑰轉發。在您的.ssh/config一套這樣的:

ForwardAgent yes 

或者,如果你想這個限制Ansible你可以在你ansible.cfg定義它:

[ssh_connection] 
ssh_args= -A 
+0

謝謝!爲了以防萬一,我使用'ssh_args = -o ForwardAgent = yes'來代替一些討厭的警告消息。 – luvejo