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