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

玩 Ansible 虐到自己了!

  •  
  •   dynaguy · 2017-03-15 07:27:24 +08:00 · 8557 次点击
    这是一个创建于 2801 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个目录(内有文件,子目录, 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
    hzlez
        1
    hzlez  
       2017-03-15 08:14:34 +08:00
    no tty present and no askpass program specified
    hzlez
        2
    hzlez  
       2017-03-15 08:16:22 +08:00
    @hzlez sorry , 按快了。
    我觉得,这个报错表示就是你的宿主机没权限直接连接到目标机器哇。还没有途径让你去输入密码,就跪了。
    可以考虑把 ssh_key 拷贝到目标机器,这样就不用其他授权方式了。
    你可以试试直接在主机 ssh 到目标机器是不是不行~
    weiweiwitch
        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 来连。
    dynaguy
        4
    dynaguy  
    OP
       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 的建议,再报!
    lsj5031
        5
    lsj5031  
       2017-03-15 12:01:52 +08:00
    @weiweiwitch 可以加 --ask-sudo-pass
    nosun
        6
    nosun  
       2017-06-21 15:04:25 +08:00
    遇到同样的问题,@weiweiwitch 的方法试了无效
    nosun
        7
    nosun  
       2017-06-21 15:06:18 +08:00
    @lsj5031 的方法也无效。这种情况只在非 root 用户执行 需要 sudo 的情况下存在。我执行的是 sync 命令。
    dynaguy
        8
    dynaguy  
    OP
       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'


    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1270 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.