我可以在服务器与ansible和客户端服务器之间进行ssh。这两个服务器都是Ubuntu的AWS实例。此命令显示客户端服务器成功:
ansible all -m ping
这是我的playbook site.yml:
的内容 vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: Move the file foo
action: file src=/tmp/crowded/foo dest=/tmp/crowded/foo
4)当我不是root时,我尝试运行这个剧本:
ansible-playbook -i hosts -k -K site.yml -vvvv
但我明白了(其中x.x.x.x是客户端服务器的IP地址):
fatal: [x.x.x.x] => SSH encountered an unknown error. The output was:
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /home/ubuntu/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/ubuntu/.ansible/cp/ansible-ssh-x.x.x.x-22-root" does not exist
...
debug1: No more authentication methods to try.
Permission denied (publickey).
TASK: [Move the file foo] *****************************************************
FATAL: no hosts matched or all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/ubuntu/site.retry
x.x.x.x : ok=0 changed=0 unreachable=1 failed=0
如何移动Ansible文件?我想了解剧本的运作方式。
答案 0 :(得分:1)
文件模块并不是要复制Ansible中的文件,而是简单地确保文件存在,更改权限,创建目录和文件。符号链接等。如果要将文件从ansible服务器复制到客户端计算机,则需要使用副本或模板模块。
我建议您仔细查看file,copy和template模块的文档。请特别注意,在您的示例中使用的文件模块在创建符号链接时仅识别src
参数:
要链接的文件的路径(仅适用于state = link)。将接受绝对,相对和不存在的路径。相对路径未扩展。
然而,所有这些与您遇到的错误无关:
debug1:不再需要尝试验证方法。 权限被拒绝(公钥)。
您似乎遇到Ansible使用的SSH身份验证问题。您可能需要按照Ansible Getting Started部分中的说明将SSH私钥加载到ssh-agent中,并且/或确保在ansible中设置private_key_file和remote_user值。 cfg文件正确。