玩 Ansible 虐到自己了!

2017-03-15 07:27:24 +08:00
 dynaguy
有个目录(内有文件,子目录, 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/\" \"sysadmin@192.168.123.165:/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 模块也失败了!

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

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

在 CentOS 那种使用 su 来切换到 root 的。你直接使用 root 来连。
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 的建议,再报!
lsj5031
2017-03-15 12:01:52 +08:00
@weiweiwitch 可以加 --ask-sudo-pass
nosun
2017-06-21 15:04:25 +08:00
遇到同样的问题,@weiweiwitch 的方法试了无效
nosun
2017-06-21 15:06:18 +08:00
@lsj5031 的方法也无效。这种情况只在非 root 用户执行 需要 sudo 的情况下存在。我执行的是 sync 命令。
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'


```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX