Ansible git克隆权限被拒问题

3

我正在尝试使用Ansible和Vagrant设置开发环境。现在我卡在了从Bitbucket克隆Git仓库的步骤。

以下是Vagrantfile和Ansible设置以及我尝试过的事情。

在我的Vagrantfile中,我有config.ssh.forward_agent = true

在我的deploy.yml中:

- name: ensure bitbucket is a known host
  lineinfile:
    dest: /home/vagrant/.ssh/known_hosts
    create: yes
    state: present
    line: "{{ lookup('pipe', 'ssh-keyscan -p 443 -t rsa altssh.bitbucket.org') }}"
    regexp: "^altssh\\.bitbucket\\.org"
  sudo_user: "vagrant"
  tags: known_hosts

- name: checkout opentest repo
  git: >
    dest="/home/vagrant/ot/"
    repo="ssh://git@altssh.bitbucket.org:443/muhammadammar/opentest/"
    version="master"
    accept_hostkey=yes
  sudo_user: "vagrant"
  tags: checkout

首先,您需要将Bitbucket的公钥添加到/home/vagrant/.ssh/known_hosts中。

当Ansible尝试从存储库检出时,以下是输出内容:

<127.0.0.1> ESTABLISH CONNECTION FOR USER: vagrant
<127.0.0.1> REMOTE_MODULE git dest="/home/vagrant/ot/" repo="ssh:********@altssh.bitbucket.org:443/muhammadammar/opentest/" version=master accept_hostkey=yes
<127.0.0.1> EXEC ssh -C -vvv -o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/ammar/.ansible/cp/%h-%r" -o StrictHostKeyChecking=no -o Port=2222 -o IdentityFile="/Users/ammar/.vagrant.d/insecure_private_key" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 127.0.0.1 /bin/sh -c 'sudo -k && sudo -HE -S -p "[sudo via ansible, key=vwkfotuvzzmllxvxptkgehjzdlqygoez] password: " -u vagrant /bin/sh -c '"'"'echo BECOME-SUCCESS-vwkfotuvzzmllxvxptkgehjzdlqygoez; LANG=C LC_CTYPE=C /usr/bin/python'"'"''
failed: [default] => {"cmd": "/usr/bin/git ls-remote 'ssh:********@altssh.bitbucket.org:443/muhammadammar/opentest/' -h refs/heads/master", "failed": true, "rc": 128}
stderr: RSA host key for IP address '131.103.20.174' not in list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

msg: RSA host key for IP address '131.103.20.174' not in list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

FATAL: all hosts have already failed -- aborting

           to retry, use: --limit @/Users/ammar/dev.retry

default                    : ok=1    changed=0    unreachable=0    failed=1   

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

在我的主机上,我已经将我的私钥添加到ssh认证代理中。我可以在主机和vagrant box上使用ssh-add -l查看私钥身份。
在vagrant box中,我可以成功地使用git clone ssh://git@altssh.bitbucket.org:443/muhammadammar/opentest ot克隆repo。
我不确定问题出在哪里。有人可以帮助解决这个问题吗? 编辑 即使在ansible中以下内容也无法工作。
shell: "git clone ssh://git@altssh.bitbucket.org:443/muhammadammar/opentest/ /home/vagrant/omp/"

你尝试过来自https://dev59.com/dF0a5IYBdhLWcg3wD1Ae#30775053的建议吗? - Frederic Henri
@FrédéricHenri 不起作用。 - MA1
2个回答

1

仅在vagrant box上成功运行git clone ...是不够的。

我的理解是:

  • ansible尝试以用户“vagrant”(User=vagrant)打开一个ssh连接到vagrant box,并提供身份文件:-o IdentityFile="/Users/ammar/.vagrant.d/insecure_private_key"
  • 执行/bin/sh -c 'sudo -k && sudo -HE -S -p "[sudo via ansible, key=vwkfotuvzzmllxvxptkgehjzdlqygoez] password: " -u vagrant /bin/sh -c '"'"'echo BECOME-SUCCESS-vwkfotuvzzmllxvxptkgehjzdlqygoez; LANG=C LC_CTYPE=C /usr/bin/python'"'"'
  • 尝试使用用户“********”(ssh:********@altssh.bitbucket.org:443/...)进行git clone

你应该能够做到同样的事情,你做到了吗?

如果没有,那么原因可能有很多,例如:

  • /Users/ammar/.vagrant.d/insecure_private_key不是vagrant用户的正确文件。
  • vagrant不是sudoer。
  • vagrant@vagrant用户的密钥未在********@altssh.bitbucket.org注册。

当您查看上述所有步骤的日志/输出后,您将知道正确的原因。

PS:使用sudo_user:vagrant似乎是多余的,因为您已经使用相同的用户进行ssh。我可以想到一些可能会这样做的原因,但至少在这里是多余的。


谢谢您的回复,但不幸的是,我对上面提到的任何内容都不了解,因为这是我第一次研究ansible和vagrant。我从未想过正确配置vagrant box以进行git操作是复杂的,并且需要了解许多设置。 - MA1

0

我曾经遇到过同样的问题。你在脚本中使用了 "sudo: yes" 吗?如果是这样,那么 root 用户需要访问仓库,而不是 vagrant 用户。

将 root 用户的公钥文件添加到 Bitbucket 帐户中,你就可以解决问题了。

或者你可以通过普通用户进行检出。

无论如何,在 vagrant 中访问仓库的用户的公钥都需要能够访问 Bitbucket。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接