【问题标题】:Getting rsync in Ansible to work with Vagrant在 Ansible 中获取 rsync 以使用 Vagrant
【发布时间】:2014-02-23 18:20:25
【问题描述】:

我想使用Vagrant 测试Ansible 脚本。一切正常,直到它尝试对远程主机进行 rsync:

- name: Install custom dev user settings
  local_action: command rsync -ave ssh roles/common/files/home/{{ item.name }} 
      {{ ansible_ssh_user }}@{{ inventory_hostname }}:/#home/
  with_items: dev_users
  when: "{{ item.custom }} == True"
  tags:
  - dev_custom
  - dev_users
  - users

但是此时它失败了 - 它似乎正在尝试通过密码登录,但我不知道为什么它应该通过 SSH 连接到 Vagrant,对(我在下面省略了一些信息......因为它提到键)?

127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-1393178896.64-215542007508316 && chmod a+rx $HOME/.ansible/tmp/ansible-1393178896.64-215542007508316 && echo $HOME/.ansible/tmp/ansible-1393178896.64-215542007508316']
<127.0.0.1> REMOTE_MODULE command rsync -ave ssh roles/common/files/home/someUser vagrant@10.0.0.10:/#home/
<127.0.0.1> PUT /tmp/tmpm3BnEW TO /home/mark/.ansible/tmp/ansible-1393178896.64-215542007508316/command
<127.0.0.1> EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=...] password: " -u root /bin/sh -c '"'"'echo SUDO-SUCCESS-...; /usr/bin/python /home/mark/.ansible/tmp/ansible-1393178896.64-215542007508316/command; rm -rf /home/mark/.ansible/tmp/ansible-1393178896.64-215542007508316/ >/dev/null 2>&1'"'"''
failed: [10.0.0.10] => (item={ ... }) => {"failed": true, "item": { ... }, "parsed": false}
invalid output was: [sudo via ansible, key=...] password: 
[sudo via ansible, key=...] password: 
Sorry, try again.
[sudo via ansible, key=...] password: 
[sudo via ansible, key=...] password: 
Sorry, try again.
[sudo via ansible, key=...] password: 
[sudo via ansible, key=...] password: 
Sorry, try again.
sudo: 3 incorrect password attempts

知道如何解决这个问题吗?

在执行此操作之前,我确实通过 ansible 将自定义密钥部署到该框,例如:

- name: Place ansible authorized key
  authorized_key: user=root key="{{ lookup('file', 'root/.ssh/ansible_key.pub') }}"
  tags:
  - root

【问题讨论】:

  • 是的,马克,但您似乎在以“流浪者”身份连接时将密钥部署到 ~root/.ssh。
  • 没关系 Leucos,你帮了大忙 - 这个 Ansible 教程看起来不错 github.com/leucos/ansible-tuto 所以接下来我会完成这个。谢谢!
  • 不客气,用 ansible 玩得开心

标签: vagrant rsync ansible


【解决方案1】:

我终于找到了解决这个问题的方法。我知道它不是 rsync,因为我在命令行中对其进行了测试:

rsync -ave ssh home/dataToSync root@10.0.0.10:/home/

而且效果很好。我已将密钥上传到我什至不必登录的 Vagrant 框。但是从 ansible 调用 rsync 失败了。我尝试按照 Leucos 的建议指定密码,但没有奏效。我想了想,想知道问题是否出在 Ansible 试图在我的本地机器上进行 sudo 操作。为了看看这是否是问题,我添加了

sudo: False

我的行动,它解决了问题。

【讨论】:

  • 当然!这是一个 local_action !很抱歉错过了 :facepalm: :(
【解决方案2】:

由于 Vagrant 以 vagrant 用户身份运行 Ansible playbook,因此尝试 rsync 到 root 拥有的目录通常会失败。与其胡乱分配组或试图找到一些神奇的幂等 chmod/chown 解决方案,我发现的最强大的解决方案就是告诉 Ansible 将 rsync 与 sudo 一起使用。

- synchronize: 
    src=/local/site/
    dest=/var/www/site
    rsync_path='sudo rsync'

注意,Ansible 的 synchronize module 包装了 rsync,使这些任务对作者来说更加简洁。

【讨论】:

    【解决方案3】:

    标记,

    如果您没有将 ssh 公钥部署到盒子(在 /home/vagrant/ssh/authorized_keys 中),被要求输入密码是很正常的行为。将“vagrant”与标准盒子一起使用应该可以。

    如果你先按下你的钥匙,之后做事会更容易。您可以找到一个面向 Vagrant 的示例 here

    您似乎正确设置了ansible_ssh_user,但请确保您还使用--ask-pass --sudo 调用您的剧本。

    作为旁注,以下行:

    when: "{{ item.custom }} == True"
    

    可以改写为:

    when: item.custom
    

    【讨论】:

    • 嗨 Leucos,感谢您提供有关何时有用的提示。如果我添加 --ask-pass --sudo 然后它会提示我输入密码('vagrant'),但它现在可以工作 - 谢谢!您能否进一步解释正在发生的事情/为什么这是必要的?我查看了 ansible.cfg 并设置了 --sudo 但没有设置 --ask-pass?
    • 好吧,你必须告诉 ansible 询问 sudo 密码。在上面的输出中,您是否有机会在 '[sudo via ansible, key=...] password:' 行之后输入任何内容,或者是否将所有这些行展开到最后而不询问?
    【解决方案4】:

    在 Ansible 2.2.1.0 中,这对我有用:

    - synchronize:
        mode: pull
        src: "/home/vagrant/dir1"
        dest: "/my_linux/dir1"
        recursive: yes
        delete: no
        times: yes
    

    ...和这个库存(使用ansible_ssh_private_key_file var):

    [vagrant1]
    192.168.77.4
    
    [vagrant1:vars]
    ansible_user=vagrant
    ansible_ssh_private_key_file="/Users/Chilcano/.vagrant.d/insecure_private_key"
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多