Ansible: Bagaimana cara menyalin File, Direktori, atau Skrip dari localhost ke Host jarak jauh?
Diterbitkan: 2019-02-24 Sebagai bagian dari departemen manajemen TI, orang-orang berurusan dengan lots of scripts
dan alat baris perintah. Saya yakin Anda menghadapi situasi sehari-hari di mana Anda harus menyalin file atau skrip ke ribuan host jarak jauh.
Orang-orang departemen TI tidak hanya login ke setiap thousands of hosts
dan menjalankan skrip secara manual. Dan itulah mengapa Ansible muncul. Ansible adalah solusi manajemen TI yang sangat kuat di luar sana untuk kami tanpa biaya.
Dalam tutorial ini kita akan membahas langkah-langkah untuk menyalin file ke host jarak jauh menggunakan Ansible.
Apa yang akan kita lakukan?
Salin file file crunchify.txt
dari lokasi /opt/ashah/
ke direktori tujuan remote host 192.66.129.83
/opt/ashah/
.
Langkah 1
Instal Ansible di Linux Ubuntu atau macOS. Ikuti tutorial untuk membahas langkah-langkah terperinci.
Langkah 2
Mari kita pahami beberapa dasar dan lokasi file untuk tutorial ini:
- Lokasi file konfigurasi: /etc/ansible/ansible.cfg
- File skrip: /opt/ashah/crunchify.yml
- file host: /opt/ashah/hosts
- file untuk disalin: /opt/ashah/crunchify.txt (file uji)
Langkah-3
konten file crunchify.yml
.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy file to remote host copy : src : / opt / ashah / crunchify . txt dest : / opt / ashah |
Langkah-4
konten file hosts
. Pastikan untuk mengubah alamat IP ke host jarak jauh Anda.
1 2 3 4 |
root @ localhost : / opt / ashah # cat hosts #crunchify-group as a sample [ crunchify - group ] 192.66.129.83 |
Langkah-5
Buat file crunchify.txt
dengan konten di bawah ini.
1 2 3 4 |
root @ localhost : / opt / ashah # cat crunchify.txt This is sample example copying file to remote location using Ansible . More ansible tutorials at https : //crunchify.com/tag/ansible/ |
Langkah-6
Jalankan perintah ini untuk menyalin file ke host jarak jauh:
-
Command
: ansible-playbook -b -vvv -u root crunchify.yml -kkkk –extra-vars "crunchify-group" -i hosts
mari kita pahami semua parameter:
- -b : menjalankan operasi dengan menjadi (sama dengan —menjadi).
- -vvv : mode verbose (-vvv untuk lebih lanjut, -vvvv untuk mengaktifkan debugging koneksi).
- -u : hubungkan sebagai pengguna ini (default=None).
- -kkkk : minta password koneksi.
- –extra-vars : atur variabel tambahan sebagai key=value atau YAML/JSON, jika nama file diawali dengan @.
- -i : tentukan jalur host inventaris atau daftar host yang dipisahkan koma.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
root @ localhost : / opt / ashah # ansible-playbook -b -vvv -u root crunchify.yml -kkkk --extra-vars "crunchify-group" -i hosts Using / etc / ansible / ansible . cfg as config file SSH password : / opt / ashah / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / opt / ashah / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / opt / ashah / hosts inventory source with ini plugin PLAYBOOK : crunchify . yml * ************************************************************************************************************************ 1 plays in crunchify . yml PLAY [ crunchify - group ] ********************************************************************************************************************************* TASK [ Gathering Facts ] ************************************************************************************************************************ < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'echo ~root && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '/root\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" && echo ansible-tmp-1550966284.57-6253496643791="` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" ) && sleep 0' "'" '' < 192.66.129.83 > ( 0 , 'ansible-tmp-1550966284.57-6253496643791=/root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791\n' , '' ) Using module file / usr / lib / python2 . 7 / dist - packages / ansible / modules / system / setup . py < 192.66.129.83 > PUT / root / . ansible / tmp / ansible - local - 32435HXzj7o / tmpjFxUXp TO / root / . ansible / tmp / ansible - tmp - 1550966284.57 - 6253496643791 / AnsiballZ_setup . py < 192.66.129.83 > SSH : EXEC sshpass - d9 sftp - o BatchMode = no - b - - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f '[192.66.129.83]' < 192.66.129.83 > ( 0 , 'sftp> put /root/.ansible/tmp/ansible-local-32435HXzj7o/tmpjFxUXp /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/AnsiballZ_setup.py\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'rm -f -r /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/ > /dev/null 2>&1 && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '' , '' ) ok : [ 192.66.129.83 ] TASK [ deploy topology ] ******************************************************************************************************************************************** ok : [ 192.66.129.83 ] = > { "changed" : false , "checksum" : "289b0c36372210c92bf028f2a19d57333af4d63c" , "dest" : "/opt/ashah/crunchify.txt" , "diff" : { "after" : { "path" : "/opt/ashah/crunchify.txt" } , "before" : { "path" : "/opt/ashah/crunchify.txt" } } , "gid" : 0 , "group" : "root" , "invocation" : { "module_args" : { "_diff_peek" : null , "_original_basename" : "crunchify.txt" , "access_time" : null , "access_time_format" : "%Y%m%d%H%M.%S" , "attributes" : null , "backup" : null , "content" : null , "delimiter" : null , "dest" : "/opt/ashah" , "directory_mode" : null , "follow" : true , "force" : false , "group" : null , "mode" : null , "modification_time" : null , "modification_time_format" : "%Y%m%d%H%M.%S" , "owner" : null , "path" : "/opt/ashah/crunchify.txt" , "recurse" : false , "regexp" : null , "remote_src" : null , "selevel" : null , "serole" : null , "setype" : null , "seuser" : null , "src" : null , "state" : "file" , "unsafe_writes" : null } } , "mode" : "0644" , "owner" : "root" , "path" : "/opt/ashah/crunchify.txt" , "size" : 21 , "state" : "file" , "uid" : 0 } PLAY RECAP * ******************************************************************************************************************************************************* 192.66.129.83 : ok = 2 changed = 0 unreachable = 0 failed = 0 |
Itu dia. Anda telah berhasil menyalin file.

Bagaimana cara memverifikasi apakah file disalin ke Host jarak jauh baru?
Cukup login ke remote host dan periksa lokasi /opt/ashah
dan Anda akan melihat file crunchify.txt
Bagaimana cara menyalin konten direktori ke direktori lain?
Cukup ubah nilai src
dan desc
dari file crunchify.yml
. Berikut adalah file crunchify.yml yang diperbarui.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy all files from folder to remote host copy : src : / opt / ashah / dest : / opt / ashah / |
Semua file di bawah folder /opt/ashah/
akan disalin ke host jarak jauh sekarang.
Beri tahu saya jika Anda memiliki pertanyaan terkait file ke lokasi terpencil menggunakan Ansible.