ใช้งาน Ansible ในฐานะผู้ใช้เฉพาะ


23

ฉันกำลังพยายามเรียกใช้งาน Ansible ที่เฉพาะเจาะจงในฐานะผู้ใช้ที่แตกต่างจากผู้ที่ใช้งาน playbook .ymlไฟล์ของฉันมีลักษณะเช่นนี้:

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

การรันภารกิจนี้แสดงให้ฉันเห็นว่าwhoamiคำสั่งส่งคืนผู้ใช้ที่แตกต่างจากที่ฉันกำหนดไว้ในภารกิจ (ส่งกลับผู้ใช้ที่กำหนดไว้ในhostsไฟล์ที่เรียกว่าubuntu)

ฉันพยายามกำหนดภารกิจเช่นนี้:

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

แต่ฉันได้รับMissing sudo passwordข้อผิดพลาด '' ถึงแม้ว่าจะมีบรรทัดในsudoersไฟล์ที่ระบุsomeusername ALL=(ALL) NOPASSWD:ALLและออกคำสั่งด้วยsudoบนเครื่องระยะไกลเนื่องจากsomeusernameไม่ถามรหัสผ่าน

ดังนั้นฉันจะรันงานเฉพาะในฐานะผู้ใช้อื่นที่ไม่ใช่ผู้ใช้ที่กำหนดไว้ในhostsไฟล์หรือrootตัวเขาเองได้อย่างไร?

คำตอบ:


19

คุณเข้าใจผิดทั้งการตั้งค่าที่นั่น:

  • remote_userเป็นการตั้งค่าAnsibleที่ควบคุมผู้ใช้ SSH ที่ Ansible ใช้เพื่อเชื่อมต่อ:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALLเป็นการกำหนดค่า sudo ที่อนุญาตให้ผู้ใช้someusernameเรียกใช้คำสั่งทั้งหมดในโฮสต์ใด ๆ โดยไม่ต้องใช้รหัสผ่าน ไม่อนุญาตให้ทุกคนออกคำสั่งเหมือนsomeusernameกัน

เป็นการดีที่คุณจะเข้าสู่ระบบโดยตรงในฐานะผู้ใช้ที่เหมาะสมและนั่นคือสิ่งที่remote_userเกี่ยวกับ แต่โดยปกติคุณจะสามารถเข้าสู่ระบบในฐานะผู้ใช้ที่เป็นผู้ดูแลระบบเท่านั้น (เช่น, ubuntu) และต้องใช้คำสั่ง sudo ในฐานะผู้ใช้รายอื่น (สมมุติว่าscrapy) จากนั้นคุณควรปล่อยremote_userให้ผู้ใช้ที่ล็อกอินและเพิ่มคุณสมบัติ ansible ต่อไปนี้ให้กับงาน:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh

1
ฉันเห็น. ขอบคุณมากที่อธิบายสิ่งนี้! แต่วิธีการทำงานที่เฉพาะเจาะจงในฐานะผู้ใช้ที่เฉพาะเจาะจงแล้ว?
errata

1
โปรดทราบว่าremote_userค่าเริ่มต้นให้กับผู้ใช้ปัจจุบันในเครื่องท้องถิ่นของคุณ - เช่นเดียวกับ ssh ทำจริง
Capi Etheriel

ตกลง แต่ด้วยการตั้งค่าเช่นนี้ฉันยังคงได้รับMissing sudo passwordข้อผิดพลาด "" มีวิธีหลีกเลี่ยงการขอรหัสผ่านสำหรับผู้ใช้นั้นหรือไม่?
errata

ฉันคิดว่าฉันพบคำตอบเพิ่มบรรทัดไปยัง sudoers: ubuntu ALL=(someusername) NOPASSWD: ALLแต่ฉันต้องคิดถึงความปลอดภัยที่อยู่เบื้องหลังสิ่งนี้ ... มีวิธีอื่นอีกไหมนอกจากการเพิ่มบรรทัดนี้ใน sudoers?
errata

1
วิธีที่เหมาะสมคือให้ผู้ใช้ระยะไกลของคุณเข้าสู่ระบบโดยตรง
Capi Etheriel

16

โปรดทราบว่าหลังจาก Ansible 1.9 sudoข้อความจะถูกแทนที่ด้วยbecomeดังนั้น

sudo: yes
sudo_user: some_user

กลายเป็น (เล่นสำนวนเจตนา):

become: yes
become_user: some_user

ดูข้อมูลเฉพาะเพิ่มเติมได้ที่นี่: /programming//a/22749788/402727

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.