3

当我尝试使用 Ansible 从 Bitbucket 克隆存储库时,任务似乎“挂起”。

文档中我找到了一些信息,但我没有使用 SSH。

如果任务似乎挂起,首先验证远程主机是否在 known_hosts 中。SSH 将提示用户授权与远程主机的第一次联系。一种解决方案是在 .ssh/config 中添加 StrictHostKeyChecking no ,它将代表用户接受和授权连接。但是,如果您以其他用户身份运行(例如将 sudo 设置为 True),则 root 将不会查看用户 .ssh/config 设置。

这是我尝试过的两本剧本。他们都“挂起”。

剧本#1

- hosts: staging_mysql
  user: ec2-user
  sudo: yes

  vars_files:
    - vars/mercurial.yml

  tasks:
    - name: Mercurial credentials setup
      action: template src=templates/hgrc.j2 dest=/home/ec2-user/.hgrc

    - name: Install Mercurial
      action: yum name=hg

    - name: Setup API repository
      action: command hg clone https://bbusername@bitbucket.org/username/my-repo -r default --debug

剧本#2

- hosts: staging_mysql
  user: ec2-user
  sudo: yes

  vars_files:
    - vars/mercurial.yml

  tasks:
    - name: Mercurial credentials setup
      action: template src=templates/hgrc.j2 dest=/home/ec2-user/.hgrc

    - name: Install Mercurial
      action: yum name=hg

    - name: Clone API repo
      hg: dest=/home/ec2-user repo=https://bbusername@bitbucket.org/username/my-repo

欢迎任何帮助。提前致谢!

4

5 回答 5

4

对于那些想要克隆私有存储库的人,我找到了更好的答案。Bitbucket 具有称为“部署密钥”的功能。登录到您的项目,进入“设置”和“部署密钥”。“添加密钥”,然后在您的项目部署过程中提供此密钥,在 hg 之前:

- file: dest=/var/www/someuser/.ssh/config state=touch mode=600

- lineinfile: dest=/var/www/someuser/.ssh/config
              line="Host bitbucket.org"
              state=present

- copy: src=someuser.key dest=/var/www/someuser/.ssh/id_rsa mode=0600
- copy: src=someuser.key.pub dest=/var/www/someuser/.ssh/id_rsa.pub mode=0600


- lineinfile: dest=/var/www/someuser/.ssh/config
              line="IdentityFile ~/.ssh/id_rsa"

- lineinfile: dest=/var/www/someuser/.ssh/config
              line="    StrictHostKeyChecking no"
              insertafter="Host bitbucket.org"
              state=present

- name: install site code
  hg: repo='ssh://hg@bitbucket.org/somecode'
      dest=someuser
      revision=stable
  tags: someuser_code
于 2014-11-23T18:51:37.180 回答
2

我认为使用 HTTPS 协议而不是 ssh 访问 BitBucket 更容易。如果您在 BitBucket 中使用私有存储库,您还应该使用 Ansible 创建(或复制)a$HOME/.hgrc到您的服务器。

这是 .hgrc 文件的内容:

[auth]
bb.prefix = https://bitbucket.org/{{ user }}/
bb.username = {{ user }}
bb.password = {{ password }}

两个额外的提示:

  1. 现在没有必要放入bbusername@您的 BitBucket 网址。
  2. 在 BB 中创建另一个可以访问您的存储库的用户,并将其配置为您在 Ansible 主机中的用户。如果您的某人入侵您的站点,他们将能够修改存储库,但无法将其删除。由于一切都是版本控制的,您将始终能够回滚修改。
于 2013-10-03T01:00:45.553 回答
1

此解决方案使用ssh(以便我们可以使用 ssh 部署密钥而不是存储 https 的凭据)并预先填充~/.ssh/known_hosts相关条目,这样hg就不会在提示接受主机密钥验证时挂起。无论您是否使用 sudo,这也应该有效 - 只要您填充正确的用户known_hosts文件

# copy the deploy key to ~/.ssh/id_rsa of the ansible user - we use copy here to
# simplify things but really you should use ansible vault or something similar
- name: copy deploy key
  copy: src=id_rsa_deploy dest=/home/{{ ansible_ssh_user }}/.ssh/id_rsa
    owner={{ ansible_ssh_user }} group={{ ansible_ssh_user }} mode=0600

- name: add bitbucket to deploy user's ~/.ssh/known_hosts
  lineinfile: dest=/home/{{ ansible_ssh_user }}/.ssh/known_hosts line="bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw=="

- name: 2 add bitbucket to deploy user's ~/.ssh/known_hosts
  lineinfile: dest=/home/{{ ansible_ssh_user }}/.ssh/known_hosts line="|1|w3ouhSzx3veHkFkoo/0KlzmLWiY=|dyifJ0YlWhJOElkc09kd5ZP2i6c= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw=="

- name: 3 add bitbucket to deploy user's ~/.ssh/known_hosts
  lineinfile: dest=/home/{{ ansible_ssh_user }}/.ssh/known_hosts line="|1|/an77APTih6pDOBpi0GcQ8b5uno=|VOep3g6ll+3Xd8WdUQ/1BqtiF1A= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw=="

- name: copy repo
  hg: repo={{ project.repo }} dest={{ project.local_repo }}
于 2014-10-07T18:37:23.830 回答
0

我已经设法解决了这个问题。以用户身份登录时,Mercurial 任务“挂起” sudo。从两个剧本中删除该行后sudo: yes,一切都按预期工作。

工作手册

- hosts: staging_mysql
  user: ec2-user

  vars_files:
    - vars/mercurial.yml

  tasks:
    - name: Mercurial credentials setup
      action: template src=templates/hgrc.j2 dest=/home/ec2-user/.hgrc

    - name: Install Mercurial
      action: yum name=hg

    - name: Clone API repo
      hg: dest=/home/ec2-user repo=https://bbusername@bitbucket.org/username/my-repo
于 2013-05-12T10:17:13.283 回答
0

您实际上是如何访问 hg 存储库的?尝试离开你的剧本中的最后一个任务,然后登录并手动尝试 hg 克隆,看看会发生什么。我怀疑它确实在提示输入密码。

于 2013-05-08T20:52:36.243 回答