Ansible bitbucket clone provisioning ssh error

时间:2017-11-17 13:01:20

标签: ssh vagrant ansible bitbucket vagrant-provision

总之,当使用Ansible配置我的流浪盒时,在尝试使用ssh克隆我的bitbucket私有仓库时,我会遇到一个神秘的错误。 该错误表明"主机密钥验证失败"。

然而,如果我流浪汉ssh然后运行' git clone '命令,私有仓库成功克隆。这表明ssh转发代理确实在工作,并且vagrant box可以访问与bitbucket repo相关联的私钥。

我在这个问题上已经苦苦挣扎了两天而且我已经失去了理智! 拜托,有人帮帮我!!!

Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.ssh.forward_agent = true

  # Only contains ansible dependencies
  config.vm.provision "shell",
    inline: "sudo apt-get install python-minimal -y"

  # Use ansible for all provisioning:
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/playbook.yml"
  end

end

我的 playbook.yml 如下:

---

- hosts: all
  become: true

  tasks:
    - name: create /var/www/ directory
      file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0755

    - name: Add the user 'ubuntu' to group 'www-data'
      user:
        name: ubuntu
        shell: /bin/bash
        groups: www-data
        append: yes

    - name: Clone bitbucket repo
      git:
        repo: git@bitbucket.org:gustavmahler/example.com.git
        dest: /var/www/poo
        version: master
        accept_hostkey: yes

错误消息:

vagrant provision

  

任务[常见:克隆bitbucket回购] ************************************* ****

     

致命:[默认]:失败! => {"更改":false," cmd":" / usr / bin / git clone --origin origin'' / var / www / poo","失败":true," msg":"克隆到' / var / www / poo'。 .. \ n警告:永久添加IP地址的RSA主机密钥' 104.192.143.3'到已知主机列表。\ r \ n许可拒绝(公钥)。\ r \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n请确认您具有正确的访," rc":128," stderr":"克隆到' / var / www / poo' ... \ n警告:永久添加RSA IP地址的主机密钥' 104.192.143.3'到已知主机列表。\ r \ nPermission denied(publickey)。\ r \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n请确认您具有正确的访;," stderr_lines":["克隆到' / var / www / poo' ...","警告:永久添加RSA主机IP地址密钥' 104.192.143.3'到已知主机列表。","权限被拒绝(公钥)。","致命:无法从远程存储库中读取。","& #34;,"请确保您拥有正确的访问权限","并且存储库已存在。"]," stdout":"& #34;," stdout_lines":[]}

其他信息:

    我机器上的
  • ssh-add -l <​​/ em>确实包含相关的bitbucket repo密钥。
  • 流浪者盒子里面的
  • ssh-add -l <​​/ em>也包含相关的bitbucket repo密钥(通过ssh-forwarding)。

如果在流浪盒内手动完成克隆工作

vagrant ssh
git clone git@bitbucket.org:myusername/myprivaterepo.com.git
Then type "yes" to allow the RSA fingerprint to be added to ~/.ssh/known_hosts (as its first connection with bitbucket)

可能的解决方案?

我在Ansible文档中看到有一个 key_file选项。我如何引用位于流浪盒外的私钥并使用ssh转发传递?

我的〜/ .ssh里面有不同实体的多个ssh密钥/也许在Ansible配置运行时,git clone命令是不是选择了正确的密钥?

非常感谢任何帮助,感谢您阅读我的噩梦。

2 个答案:

答案 0 :(得分:1)

由于您使用become: true运行整个Playbook,因此SSH密钥转发(以及故障排除)变得无关紧要,因为从您的游戏连接到BitBucket的用户是root

ubuntu用户身份运行连接到BitBucket的任务:

  • become: false任务中指定Clone bitbucket repo

  • 或从播放中删除become: true并仅将其添加到需要提升权限的任务中。

答案 1 :(得分:1)

这个答案直接来自techraf的有用评论。

  • 我从&www; www-data&#39;更改了/ var / www目录的所有者至 &#39; ubuntu的&#39; (我用来通过ssh登录的用户名)。
  • 我还添加了&#34;成为:false&#34;在git任务之上。

注意:此后我一直在处理以下问题,因此这个答案并不能完全解决我的问题: Ansible bitbucket clone repo provisioning ssh error

更新了工作playbook.yml文件

---

- hosts: all
  become: true

  tasks:
    - name: create /var/www/ directory
      file: dest=/var/www/ state=directory owner=ubuntu group=www-data mode=0755

    - name: Add the user 'ubuntu' to group 'www-data'
      user:
        name: ubuntu
        shell: /bin/bash
        groups: www-data
        append: yes

    - name: Clone bitbucket repo
      become: false
      git:
        repo: git@bitbucket.org:[username]/example.com.git
        dest: /var/www/poo
        version: master
        accept_hostkey: yes