首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ansible
Ansible Documentation
V2EX  ›  Ansible

玩 Ansible 虐到自己了!

  •  
  •   dynaguy · 2017-03-15 07:27:24 +08:00 · 5052 次点击
    这是一个创建于 998 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个目录(内有文件,子目录, link)在控制机上,要复制到目标机上,咋就辣么难呢?

    Playbook:
    - hosts: testvbox
    become: true
    tasks:
    - name: Copy Paraview lib files
    src: /etc/ansible/files/ParaView-5.3.0-Qt5-OpenGL2-MPI-Linux-64bit/lib/
    dest: /usr/local/lib/
    archive: no
    links: yes

    报错:
    TASK [Copy Paraview lib files] *************************************************
    fatal: [192.168.123.165]: FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates -F --compress --links --rsh 'ssh -S none -o StrictHostKeyChecking=no' --rsync-path=\"sudo rsync\" --out-format='<<CHANGED>>%i %n%L' \"/etc/ansible/files/ParaView-5.3.0-Qt5-OpenGL2-MPI-Linux-64bit/lib/\" \"[email protected]:/usr/local/lib/\"", "failed": true, "msg": "sudo: no tty present and no askpass program specified\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]\n", "rc": 12}
    to retry, use: --limit @/etc/ansible/test.retry

    试了 copy 模块也失败了!

    呼唤老司机!
    8 回复  |  直到 2017-06-22 00:28:43 +08:00
        1
    hzlez   2017-03-15 08:14:34 +08:00
    no tty present and no askpass program specified
        2
    hzlez   2017-03-15 08:16:22 +08:00
    @hzlez sorry , 按快了。
    我觉得,这个报错表示就是你的宿主机没权限直接连接到目标机器哇。还没有途径让你去输入密码,就跪了。
    可以考虑把 ssh_key 拷贝到目标机器,这样就不用其他授权方式了。
    你可以试试直接在主机 ssh 到目标机器是不是不行~
        3
    weiweiwitch   2017-03-15 10:14:21 +08:00   ♥ 1
    ansible 有个问题。如果你需要切换到更高权限的账户来执行命令,那么你需要设置 nopasswd 到这个账户,否则会出现你遇到的这种问题。

    比如在 Ubuntu 那种使用 sudo 来执行管理命令的,你需要在 /etc/sudoers 的 sudo 那行改成%sudo ALL=(ALL:ALL) NOPASSWD:ALL

    在 CentOS 那种使用 su 来切换到 root 的。你直接使用 root 来连。
        4
    dynaguy   2017-03-15 12:00:41 +08:00
    @hzlez
    @weiweiwitch

    其实这个 playbook 前面还有很多 task,都执行了,包括这个:
    - name: Copy Paraview bin files
    copy:
    src: /etc/ansible/files/ParaView-5.3.0-Qt5-OpenGL2-MPI-Linux-64bit/bin/
    dest: /usr/local/bin/

    所以我不认为是权限问题。/usr/local/bin/可以写,而 /usr/local/lib/不能写,那也太诡异了!

    这个成功执行的 copy, src 目录下只有几个文件,没有子目录和 link 。觉得问题在这里,但没有解决办法。愁 ing.

    我会试试 @weiweiwitch 的建议,再报!
        5
    lsj5031   2017-03-15 12:01:52 +08:00
    @weiweiwitch 可以加 --ask-sudo-pass
        6
    nosun   2017-06-21 15:04:25 +08:00
    遇到同样的问题,@weiweiwitch 的方法试了无效
        7
    nosun   2017-06-21 15:06:18 +08:00
    @lsj5031 的方法也无效。这种情况只在非 root 用户执行 需要 sudo 的情况下存在。我执行的是 sync 命令。
        8
    dynaguy   2017-06-22 00:28:43 +08:00
    @nosun 好几个月了,又翻了一下我的解决办法,希望有帮助。

    ```
    - hosts: testvbox
    become: true
    tasks:


    - name: Modify /etc/sudoers
    lineinfile:
    dest: /etc/sudoers
    regexp: '^Defaults env_reset'
    line: 'Defaults env_reset,!tty_tickets'

    - name: Copy Paraview bin files
    synchronize:
    src: /etc/ansible/files/ParaView-5.3.0-Qt5-OpenGL2-MPI-Linux-64bit/bin/
    dest: /usr/local/bin/

    - name: Copy Paraview lib files
    synchronize:
    src: /etc/ansible/files/ParaView-5.3.0-Qt5-OpenGL2-MPI-Linux-64bit/lib/
    dest: /usr/local/lib/
    archive: no
    links: yes
    recursive: yes

    - name: Restore /etc/sudoers
    lineinfile:
    dest: /etc/sudoers
    regexp: '^Defaults env_reset,!tts_tickets'
    line: 'Defaults env_reset'


    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2289 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 08:29 · PVG 16:29 · LAX 00:29 · JFK 03:29
    ♥ Do have faith in what you're doing.