ค้นหาเว็บไซต์

วิธีกำหนดค่าโหนดที่มีการจัดการ Ansible และเรียกใช้คำสั่งเฉพาะกิจ - ตอนที่ 3


ในสองบทความก่อนหน้าของซีรีส์ Ansible นี้ เราได้อธิบายองค์ประกอบหลักของ Ansible และการตั้งค่าโหนดควบคุม Ansible ในส่วนที่ 3 นี้ เราจะสาธิตวิธีที่คุณสามารถกำหนดค่าโหนดที่ได้รับการจัดการ Ansible เพื่อเรียกใช้คำสั่งเฉพาะกิจบนโฮสต์ระยะไกล

ตั้งค่าการตรวจสอบสิทธิ์ SSH แบบไม่ต้องใช้รหัสผ่านไปยังโหนดที่มีการจัดการแบบ Ansible

จากการสรุปในหัวข้อที่แล้ว การจัดการโฮสต์ระยะไกลด้วย Ansible จำเป็นต้องมีการตั้งค่าการรับรองความถูกต้อง SSH แบบไม่ใช้รหัสผ่านระหว่างโหนดควบคุม Ansible และโฮสต์ที่ได้รับการจัดการ สิ่งนี้เกี่ยวข้องกับการสร้างคู่คีย์ (คู่คีย์ SSH สาธารณะและส่วนตัว) บนโหนด Ansible Control และการคัดลอกคีย์สาธารณะไปยังโฮสต์ระยะไกลทั้งหมด นี่จะเป็นก้าวสำคัญในอนาคตและจะทำให้งานของคุณง่ายขึ้นมาก

กำหนดค่าการยกระดับสิทธิ์บนโหนดที่ได้รับการจัดการ

เมื่อเข้าสู่ระบบในฐานะผู้ใช้ทั่วไป คุณอาจต้องทำงานบางอย่างบนโหนดที่ได้รับการจัดการซึ่งต้องใช้สิทธิ์ระดับสูงหรือสิทธิ์รูท งานเหล่านี้รวมถึงการจัดการแพ็คเกจ การเพิ่มผู้ใช้และกลุ่มใหม่และการแก้ไขการกำหนดค่าระบบเพื่อกล่าวถึงเพียงบางส่วน เพื่อให้บรรลุเป้าหมายนี้ คุณต้องเรียกใช้คำสั่งบางอย่างใน Playbook เพื่อรันงานในฐานะผู้ใช้ที่มีสิทธิ์บนโฮสต์ระยะไกล

กลายเป็น

Ansible ช่วยให้คุณสามารถ 'กลายเป็น' ผู้ใช้รายอื่นบนโหนดที่ได้รับการจัดการที่แตกต่างจากโหนดที่เข้าสู่ระบบในปัจจุบัน คำสั่ง become:yes จะยกระดับสิทธิ์ของคุณและอนุญาตให้คุณดำเนินการงานที่ ต้องการสิทธิ์รูท เช่น การติดตั้งและอัพเดตแพ็คเกจ และการรีบูตระบบ

พิจารณา Playbook httpd.yml ที่ติดตั้งและเริ่มต้นเว็บเซิร์ฟเวอร์ Apache ดังที่แสดง:

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

คำสั่ง กลายเป็น: ใช่ อนุญาตให้คุณดำเนินการคำสั่งในฐานะผู้ใช้รูทบนโฮสต์ระยะไกล

กลายเป็น_ผู้ใช้

คำสั่งอื่นที่คุณสามารถใช้เพื่อเป็นผู้ใช้รายอื่นคือ become_user สิ่งนี้ช่วยให้คุณสลับไปใช้ผู้ใช้ sudo บนโฮสต์ระยะไกลเมื่อเข้าสู่ระบบและไม่ใช่ผู้ใช้ที่คุณเข้าสู่ระบบ

ตัวอย่างเช่น หากต้องการเรียกใช้คำสั่งในฐานะผู้ใช้ tecmint บนระยะไกล ให้ใช้คำสั่งตามที่แสดง

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

กลายเป็น_วิธีการ

คำสั่งนี้จะแทนที่วิธีการเริ่มต้นที่ตั้งไว้ในไฟล์ ansible.cfg ซึ่งโดยปกติจะตั้งค่าเป็น sudo

กลายเป็น_ธง

สิ่งเหล่านี้ใช้ในระดับการเล่นหรืองาน เช่น เมื่อคุณต้องการสลับไปใช้ผู้ใช้เมื่อเชลล์ถูกตั้งค่าเป็น nologin

ตัวอย่างเช่น,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

ตัวเลือกบรรทัดคำสั่งในการยกระดับสิทธิ์

มาดูตัวเลือกบรรทัดคำสั่งที่คุณสามารถใช้เพื่อยกระดับสิทธิ์ของคุณเมื่อรันคำสั่ง:

  • --ask-become-pass, -K – ระบบจะแจ้งให้คุณใส่รหัสผ่านของผู้ใช้ sudo บนระบบระยะไกลที่คุณพยายามเชื่อมต่อ
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b – สิ่งนี้ช่วยให้คุณสามารถรันงานในฐานะผู้ใช้รูทโดยไม่ต้องถามรหัสผ่าน
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – อนุญาตให้คุณเรียกใช้งานในฐานะผู้ใช้รายอื่น
ansible-playbook myplaybook.yml --become-user=tecmint

ตรวจสอบการกำหนดค่าการทำงานโดยใช้คำสั่ง Ad-Hoc Ansible

บางครั้ง คุณอาจต้องการทำงานที่รวดเร็วและง่ายดายบนโฮสต์ระยะไกลหรือเซิร์ฟเวอร์ใน Ansible โดยไม่จำเป็นต้องสร้าง Playbook ในกรณีนั้น คุณจะต้องเรียกใช้คำสั่ง เฉพาะกิจ

คำสั่ง Adhoc คืออะไร?

คำสั่งเฉพาะกิจที่สามารถตอบได้คือคำสั่งบรรทัดเดียวที่ช่วยให้คุณดำเนินงานง่ายๆ ในลักษณะที่เรียบง่ายแต่มีประสิทธิภาพโดยไม่จำเป็นต้องสร้าง Playbook งานดังกล่าวรวมถึงการคัดลอกไฟล์ระหว่างโฮสต์ การรีบูตเซิร์ฟเวอร์ การเพิ่มและการลบผู้ใช้ และการติดตั้งแพ็คเกจเดียว

ในบทช่วยสอนนี้ เราจะสำรวจแอปพลิเคชันต่างๆ ของคำสั่ง Ansible Ad-Hoc เราจะใช้ไฟล์พื้นที่โฆษณาด้านล่างเพื่อการสาธิต

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

การใช้งานคำสั่ง Adhoc เบื้องต้น

การใช้งานคำสั่ง Ansible-Adhoc ขั้นพื้นฐานที่สุดคือการส่ง Ping ไปยังโฮสต์หรือกลุ่มของโฮสต์

ansible -m ping all

ในคำสั่งข้างต้น พารามิเตอร์ -m คือตัวเลือกโมดูล Ping เป็นคำสั่ง adhoc และพารามิเตอร์ตัวที่สองทั้งหมดแสดงถึงโฮสต์ทั้งหมดในไฟล์สินค้าคงคลัง ผลลัพธ์ของคำสั่งแสดงไว้ด้านล่าง:

หากต้องการ ping กลุ่มโฮสต์ใดกลุ่มหนึ่ง ให้แทนที่พารามิเตอร์ 'all' ด้วยชื่อกลุ่ม ในตัวอย่างด้านล่าง เรากำลังทดสอบการเชื่อมต่อกับโฮสต์ภายใต้กลุ่มเว็บเซิร์ฟเวอร์

ansible -m ping webservers

นอกจากนี้ คุณสามารถใช้แอตทริบิวต์ -a เพื่อระบุคำสั่ง Linux ปกติในเครื่องหมายคำพูดคู่ได้ ตัวอย่างเช่น ในการตรวจสอบสถานะการออนไลน์ของระบบรีโมต ให้รัน:

ansible -a "uptime" all

หากต้องการตรวจสอบการใช้งานดิสก์ของโฮสต์ระยะไกลให้รัน

ansible -a "df -Th" all

มีโมดูลนับร้อยที่คุณสามารถใช้กับคำสั่ง Adhoc ได้ หากต้องการดูรายการโมดูลทั้งหมดพร้อมคำอธิบาย ให้รันคำสั่งด้านล่าง

ansible-doc -l

หากต้องการดูข้อมูลโดยละเอียดเกี่ยวกับโมดูลใดโมดูลหนึ่ง ให้รันคำสั่ง

ansible-doc module_name

ตัวอย่างเช่น หากต้องการค้นหารายละเอียดเพิ่มเติมเกี่ยวกับการเรียกใช้ โมดูล yum:

ansible-doc yum

การจัดการแพ็คเกจ/บริการด้วย Ansible

คำสั่ง Adhoc แบบ Ansible สามารถใช้สำหรับการติดตั้งและการลบแพ็คเกจโดยใช้ตัวจัดการแพ็คเกจ yum และ apt

หากต้องการติดตั้งเว็บเซิร์ฟเวอร์ Apache บนโฮสต์ CentOS 7 ภายใต้กลุ่มเว็บเซิร์ฟเวอร์ในไฟล์สินค้าคงคลัง ให้รันคำสั่ง:

ansible webservers -m yum -a "name=httpd  state=present"

หากต้องการตรวจสอบการติดตั้งเว็บเซิร์ฟเวอร์ Apache ให้เข้าสู่ระบบไคลเอนต์ระยะไกลและเรียกใช้

rpm -qa | grep httpd

หากต้องการถอนการติดตั้ง Apache ให้เปลี่ยนสถานะจาก ปัจจุบัน เป็น ไม่มี

ansible webservers -m yum -a "name=httpd  state=absent"

อีกครั้งเพื่อยืนยันการลบ httpd run

rpm -qa | grep httpd

ตามที่สังเกต แพ็คเกจเว็บเซิร์ฟเวอร์ Apache ได้ถูกลบทิ้งแล้ว

การสร้างผู้ใช้และกลุ่มโดยใช้ Ansible

เมื่อสร้างผู้ใช้ โมดูล 'ผู้ใช้' จะมีประโยชน์มาก หากต้องการสร้างผู้ใช้ใหม่ james ด้วยรหัสผ่าน redhat บนระบบไคลเอ็นต์ Database_server ให้ใช้คำสั่ง

ansible database_server -m user -a "name=james password=redhat"

เพื่อยืนยันการสร้างผู้ใช้ใหม่ ให้รันคำสั่ง:

ansible database_servers -a "id james"

หากต้องการลบผู้ใช้ ให้รันคำสั่ง:

ansible database_servers -m user -a "name=james state=absent"

การเพิ่มสิทธิพิเศษ

หากคุณใช้งาน Ansible ในฐานะผู้ใช้ทั่วไป Ansible จะให้การยกระดับสิทธิ์ในโฮสต์ระยะไกลโดยใช้ตัวเลือก --become เพื่อรับสิทธิ์รูทและ -k เพื่อขอรหัสผ่าน

ตัวอย่างเช่น หากต้องการเรียกใช้คำสั่ง Ansible adhoc 'netstat -pnltu' ด้วยตัวเลือกสิทธิพิเศษ –-become และตัวเลือก -K เพื่อแจ้งให้ระบุ รหัสผ่านของผู้ใช้รูทเพื่อรันคำสั่ง

ansible webservers -m shell -a 'netstat -pnltu' --become -K

หากต้องการเป็นผู้ใช้รายอื่นที่ไม่ใช่ root ให้ใช้แอตทริบิวต์ --become-user

ตัวอย่างเช่น หากต้องการเรียกใช้ 'df -Th' ในฐานะผู้ใช้ tecmint บนโฮสต์ระยะไกลและแจ้งให้เรียกใช้รหัสผ่าน:

ansible all -m shell -a 'df -Th' --become-user tecmint -K

การรวบรวมข้อเท็จจริงเกี่ยวกับระบบโฮสต์

ข้อเท็จจริง หมายถึงข้อมูลโดยละเอียดเกี่ยวกับระบบ ซึ่งรวมถึงข้อมูลเกี่ยวกับที่อยู่ IP สถาปัตยกรรมระบบ หน่วยความจำ และ CPU ที่จะกล่าวถึงบางส่วน

หากต้องการดึงข้อมูลเกี่ยวกับโฮสต์ระยะไกล ให้รันคำสั่ง:

ansible all -m setup 

ถ่ายโอนไฟล์/คัดลอกไฟล์

Ansible ใช้โมดูล คัดลอก เพื่อคัดลอกไฟล์จากการควบคุม Ansible ไปยังโฮสต์ระยะไกลหลายรายการอย่างปลอดภัย

ด้านล่างนี้เป็นตัวอย่างของการดำเนินการคัดลอก:

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

คำสั่งคัดลอกไฟล์ /var/log/secure ในโหนด Ansible Control ไปยังโฮสต์ระยะไกลในกลุ่มเว็บเซิร์ฟเวอร์ในปลายทาง /tmp

คุณสามารถใช้โมดูลไฟล์เพื่อเปลี่ยนการอนุญาตและความเป็นเจ้าของไฟล์

ansible webservers -m file -a "dest=/tmp/secure mode=600"

นอกจากนี้ คุณสามารถผนวกอาร์กิวเมนต์ของเจ้าของและกลุ่มได้ดังที่แสดง:

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

คุณยังสามารถสร้างไดเร็กทอรีได้ในลักษณะเดียวกันกับ mkdir -p ดังที่แสดง

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

ตัวอย่างเช่น,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

บทสรุป

ในบทความนี้ เราให้ความกระจ่างเกี่ยวกับวิธีที่คุณสามารถกำหนดค่าโหนดที่ได้รับการจัดการเพื่อรันคำสั่งเฉพาะกิจ Ansible เพื่อจัดการโฮสต์ระยะไกล เราหวังว่าคุณจะพบว่ามีประโยชน์ ให้มันยิงและแจ้งให้เราทราบว่ามันไปอย่างไร