Ansible同期モジュールを使用してリモートサーバー間でファイルをコピー中にエラーが発生しました。

Ansible同期モジュールを使用してリモートサーバー間でファイルをコピー中にエラーが発生しました。

私はAnsibleに初めて触れました。私のラップトップでは、Ansible 2.10を使用してリモートサーバーAからリモートサーバーBにいくつかのファイルとディレクトリをコピーしようとしています。

serverAでsudoユーザーを使用してSSHキー(id_rsa)を生成し、公開鍵をserverB(同じsudoユーザーのauthenticate_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_serverbecome: trueジョブがrsyncによって実行され、rsyncが欠落しているroot公開鍵を使用しようとしているため-i /root/.ssh/id_rsa

警告:IDファイル/root/.ssh/id_rsaにアクセスできません。そのファイルやディレクトリはありません。

rootこの問題を解決するには、atのsshキーを生成してatprod_serverに接続できることを確認するかnew_server(rootにファイルをコピーさせたい場合)、再生からグローバルを削除し、atに接続してファイルをコピーできることをbecome: true 確認してください。sudo_userprod_servernew_server

再生からグローバルを削除する場合は、become: true必要に応じてすべての操作で選択的に有効にする必要があります。この場合、プレイブックのアップグレードを簡素化するために、ファイル同期を別々のプレイに入れることができます。

関連情報