غير مرغوب فيه: كيفية نسخ ملف أو دليل أو برنامج نصي من مضيف محلي إلى مضيف بعيد؟
نشرت: 2019-02-24 كجزء من قسم إدارة تكنولوجيا المعلومات ، يتعامل الأشخاص مع lots of scripts
وأدوات سطر الأوامر. أنا متأكد من أنك تواجه موقفًا يومًا بعد يوم يكون لديك فيه نسخ الملفات أو البرامج النصية إلى الآلاف من المضيفين البعيدين.
لا يقوم أفراد قسم تكنولوجيا المعلومات فقط بتسجيل الدخول إلى كل thousands of hosts
وتشغيل البرنامج النصي يدويًا. وهذا هو سبب ظهور Ansible في الصورة. Ansible هو حل قوي جدًا لإدارة تكنولوجيا المعلومات متاح لنا مجانًا.
سننتقل في هذا البرنامج التعليمي إلى الخطوات لنسخ الملفات إلى مضيف بعيد باستخدام Ansible.
ما نحن بصدد القيام به؟
انسخ ملف crunchify.txt
من الموقع /opt/ashah/
إلى دليل الوجهة للمضيف البعيد 192.66.129.83
/opt/ashah/
.
الخطوة 1
قم بتثبيت Ansible على Linux Ubuntu أو macOS. اتبع الدروس لتجاوز الخطوات التفصيلية.
الخطوة 2
دعونا نفهم بعض الأساسيات وموقع الملف لهذا البرنامج التعليمي:
- موقع ملف التكوين: /etc/ansible/ansible.cfg
- ملف البرنامج النصي: /opt/ashah/crunchify.yml
- ملف hosts: / opt / ashah / hosts
- الملف المراد نسخه: /opt/ashah/crunchify.txt (ملف اختبار)
الخطوه 3
لمحتوى الملف 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 |
الخطوة 4
hosts
محتوى الملف. تأكد من تغيير عنوان IP إلى مضيفك البعيد.
1 2 3 4 |
root @ localhost : / opt / ashah # cat hosts #crunchify-group as a sample [ crunchify - group ] 192.66.129.83 |
الخطوة 5
قم بإنشاء ملف crunchify.txt
بالمحتوى أدناه.
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/ |
الخطوة 6
قم بتشغيل هذا الأمر لنسخ الملف إلى المضيف البعيد:
-
Command
: ansible-playbook -b -vvv -u root crunchify.yml -kkkk –extra-vars "crunchify-group" -i hosts
دعونا نفهم جميع المعلمات:
- -b: قم بتشغيل العمليات باستخدام تصبح (مثل "تصبح").
- -vvv: الوضع المطول (-vvv للمزيد ، -vvvv لتمكين تصحيح أخطاء الاتصال).
- -u: الاتصال بهذا المستخدم (افتراضي = لا شيء).
- -kkkk: اطلب كلمة مرور الاتصال.
- –extra-vars: عيّن المتغيرات الإضافية كمفتاح = قيمة أو YAML / JSON ، إذا كان اسم الملف يعتمد مسبقًا على @.
- -i: تحديد مسار مضيف المخزون أو قائمة مضيف مفصولة بفواصل.
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 |
هذا هو. لقد نجحت في نسخ الملف.

كيف تتحقق مما إذا تم نسخ الملف إلى مضيف بعيد جديد؟
ما عليك سوى تسجيل الدخول إلى المضيف البعيد والتحقق من الموقع /opt/ashah
ashah وسترى الملف crunchify.txt
كيفية نسخ محتوى دليل إلى دليل آخر؟
ما عليك سوى تغيير src
وقيمة desc
لملف crunchify.yml
. هنا ملف crunchify.yml محدث.
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 / |
سيتم نسخ جميع الملفات الموجودة ضمن المجلد /opt/ashah/
إلى المضيفين البعيدين الآن.
اسمحوا لي أن أعرف إذا كان لديك أي سؤال في ملف التأقلم إلى موقع بعيد باستخدام Ansible.