Mic*_*ael 8 ansible ansible-playbook
Ansible的同步模块(v1.6.5)提示输入密码(输入密钥的密码),即使我已经在运行playbook 的开头输入了密码.
知道为什么吗?
我用以下选项运行我的playbook:
-u myuser --ask-sudo-pass --private-key=/path/to/id_rsa
Run Code Online (Sandbox Code Playgroud)
这是我的同步任务:
- name: synchronize source files in src location
sudo: yes
synchronize: src={{local_src}} dest={{project_dirs.src}} archive=yes delete=yes rsync_opts=["--compress"]
when: synchronize_src_files
Run Code Online (Sandbox Code Playgroud)
使用ssh-agent更新
按照Lekensteyn的建议,我尝试使用ssh-agent.我没有提示,但任务失败了.我错过了什么?
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
错误:
TASK: [rolebooks/project | synchronize source files in src location] **********
failed: [10.0.0.101] => {"cmd": "rsync --delay-updates -FF --compress --delete-after --archive --rsh 'ssh -i /home/vagrant/.ssh/id_rsa -o StrictHostKeyChecking=no' --rsync-path=\"sudo rsync\" [--compress] --out-format='<<CHANGED>>%i %n%L' /projects/webapp mike@10.0.0.101:/var/local/sites/project1/src", "failed": true, "rc": 12}
msg: sudo: no tty present and no askpass program specified
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
Run Code Online (Sandbox Code Playgroud)
Lek*_*eyn 11
该synchronize命令(至少是Ansible 1.6.6)似乎忽略了Ansible打开的普通SSH控制套接字.您的任务可以扩展到以下内容:
{
"cmd": "rsync --delay-updates -FF --compress --archive
--rsh 'ssh -o StrictHostKeyChecking=no'
--out-format='<<CHANGED>>%i %n%L'
/home/me/src/ user@host:/dest/",
"failed": true,
"rc": 23
}
Run Code Online (Sandbox Code Playgroud)
要获取这些详细信息,请使用该-v选项运行您的Playbook .作为解决方法,您可以启动ssh-agent并添加SSH密钥缓存ssh-add.有关详细信息,请参阅其手册页.
synchronize模块的额外警告:
sudo: yes,--rsh 'sudo ssh'如果远程sudo配置需要密码和/或TTY ,则运行时将运行ansible .解决方案:sudo: no在任务定义中设置.ansible_ssh_user),而不是sudo用户.我还没有找到一种方法来覆盖这个用户(除了一个未经测试的方法,-o User通过其中一个选项(dest_port="22 -o User=your_user"?)结合使用选项覆盖用户set_remote_user=yes).这取自我的任务文件:
- name: sync app files
sudo: no
synchronize: src={{app_srcdir}}/ dest={{appdir}}/
recursive=yes
rsync_opts=--exclude=.hg
# and of course Ubuntu 12.04 does not support --usermap..
#,--chown={{deployuser}}:www-data
# the above goes bad because ansible_ssh_user=user has no privileges
# local_action: command rsync -av --chown=:www-data
# {{app_srcdir}}
# {{deployuser}}@{{inventory_hostname}}:{{appdir}}/
# when: app_srcdir is defined
# The above still goes bad because {{inventory_hostname}} is not ssh host...
Run Code Online (Sandbox Code Playgroud)
我认为默认情况下,synchronize是在rsync命令上显式设置用户名 - 你可以阻止这种情况并允许rsync在你的ssh配置文件中工作.
http://docs.ansible.com/synchronize_module.html
set_remote_user
将user @放在远程路径上.如果您有自定义ssh配置来定义与库存用户不匹配的主机的远程用户,则应将此参数设置为"no".
我在我的ssh配置中配置了一个远程用户,需要添加set_remote_user=no才能使同步工作,否则它会尝试使用错误的用户名,ssh密钥和密码都不起作用.
| 归档时间: |
|
| 查看次数: |
10910 次 |
| 最近记录: |