วิธีกำหนดค่าโหนดที่มีการจัดการ 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 เพื่อจัดการโฮสต์ระยะไกล เราหวังว่าคุณจะพบว่ามีประโยชน์ ให้มันยิงและแจ้งให้เราทราบว่ามันไปอย่างไร