使用 Ansible 同步模块在远程服务器之间复制文件时出错

使用 Ansible 同步模块在远程服务器之间复制文件时出错

我对 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_servernew_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_servernew_server复制文件。

当您become: true从播放中删除全局时,您必须在需要时在任何任务中选择性地启用它。在这种情况下,为了简化 playbook 中的升级,您可能希望将文件的同步放入单独的 play 中。

相关内容