我对 Ansible 还很陌生。在我的笔记本电脑(ansible master)上使用 Ansible 2.10,我试图将一些文件和目录从远程服务器 A 复制到远程服务器 B。
在serverA中,我使用sudo用户创建了一个SSH密钥(id_rsa),并将公钥复制到serverB(复制到同一sudo用户的authorized_keys文件中)。
主机文件
[servers]
prod_server ansible_host=IP_prod
new_server ansible_host=IP_new
[servers:vars]
ansible_user=sudo_user
ansible_sudo_pass=password
ansible_ssh_private_key_file=~/.ssh/id_rsa
剧本
- name: Transfer files from prod to new server
hosts: new_server
gather_facts: false
become: true
roles:
- rsync
角色
- name: Copy files to new server
synchronize:
src: /etc/letsencrypt/live/domain/fullchain.pem
dest: /opt
delegate_to: prod_server
运行剧本时出现错误:
fatal: [new_server -> IP_new]: FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates
-F --compress --archive --rsh=/usr/bin/ssh -S none -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no
-o UserKnownHostsFile=/dev/null --rsync-path=sudo rsync --out-format=<<CHANGED>>%i %n%L
/etc/letsencrypt/live/domain/fullchain.pem sudo_user@IP_new:/opt", "msg": "Warning: Identity
file /root/.ssh/id_rsa not accessible: No such file or directory.\nWarning: Permanently added
'IP_new' (ECDSA) to the list of known hosts.\r\nsudo_user@IP_new: Permission denied (publickey).....
任何帮助将非常感激。
问候
答案1
delegate_to: prod_server
任务中的synchronize:
意思是文件应该从 复制prod_server
到new_server
。因为become: true
任务是由 rsync 运行的,并且 rsync 尝试使用丢失的root
公钥-i /root/.ssh/id_rsa
警告:身份文件 /root/.ssh/id_rsa 无法访问:没有这样的文件或目录。
root
要解决此问题,请为at创建 ssh 密钥prod_server
并确保她可以连接到new_server
(如果您希望 root 复制文件),或者become: true
从播放中删除 global 并确保sudo_user
能够连接到prod_server
并new_server
复制文件。
当您become: true
从播放中删除全局时,您必须在需要时在任何任务中选择性地启用它。在这种情况下,为了简化 playbook 中的升级,您可能希望将文件的同步放入单独的 play 中。