【问题标题】:Ansible bitbucket clone provisioning ssh errorAnsible bitbucket 克隆配置 ssh 错误
【发布时间】:2017-11-17 13:01:19
【问题描述】:

总之,当我使用 Ansible 配置我的 vagrant box 时,我在尝试使用 ssh 克隆我的 bitbucket 私有 repo 时遇到了一个神秘的错误。 该错误指出“主机密钥验证失败”。

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

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

流浪文件:

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

TASK [common : Clone bitbucket repo] *************************************** ****

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

其他信息:

  • 我机器上的 ssh-add -l 确实包含相关的 bitbucket 存储库密钥。
  • ssh-add -l vagrant box 内也包含相关的 bitbucket repo 密钥(通过 ssh-forwarding)。

如果在 vagrant box 中手动完成,克隆仍然有效?:

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: 选项。如何引用位于 vagrant box 外部并使用 ssh 转发传入的私钥?

我的 ~/.ssh/ 中确实有多个用于不同实体的 ssh 密钥,也许通过 Ansible 配置运行时 git clone 命令没有选择正确的密钥?

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

【问题讨论】:

标签: ssh vagrant ansible bitbucket vagrant-provision


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    • 我将 /var/www 目录的所有者从“www-data”更改为 'ubuntu'(我用来通过 ssh 登录的用户名)。
    • 我还在 git 任务上方添加了“become: false”。

    注意:此后我一直在处理以下问题,因此此答案不能完全解决我的问题: 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 2019-05-24
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      相关资源
      最近更新 更多