Chạy tác vụ Ansible như một người dùng cụ thể


23

Tôi đang cố gắng chạy một tác vụ Ansible cụ thể với tư cách là một người dùng khác với người đang chạy playbook. .ymlTập tin của tôi trông như thế này:

---

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

Chạy tác vụ này cho tôi thấy rằng whoamilệnh trả về một người dùng khác với tôi đã xác định trong tác vụ (chính xác, trả về người dùng được xác định trong hoststệp được gọi ubuntu).

Tôi cũng đã cố gắng xác định nhiệm vụ như thế này:

---

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

nhưng sau đó tôi gặp Missing sudo passwordlỗi '', mặc dù có một dòng trong sudoerstệp nói someusername ALL=(ALL) NOPASSWD:ALLvà phát lệnh với sudomáy từ xa vì someusernamekhông hỏi tôi mật khẩu.

Vậy, làm thế nào tôi có thể chạy tác vụ cụ thể với tư cách là một người dùng khác mà không phải là người dùng được xác định trong hoststệp hoặc rootchính anh ta?

Câu trả lời:


19

Bạn đang hiểu nhầm cả hai cài đặt ở đó:

  • remote_user là cài đặt Ansible điều khiển người dùng SSH Ansible đang sử dụng để kết nối:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL là cấu hình sudo cho phép người dùng someusernamethực thi tất cả các lệnh trong bất kỳ máy chủ nào mà không cần mật khẩu. Nó không cho phép bất cứ ai ban hành lệnh như someusernamevậy.

Lý tưởng nhất, bạn sẽ đăng nhập trực tiếp như đúng người dùng và đó remote_userlà tất cả những gì về. Nhưng thông thường, bạn chỉ có thể đăng nhập với tư cách là người dùng quản trị (giả sử ubuntu) và phải thực hiện các lệnh như một người dùng khác (giả sử scrapy). Sau đó, bạn nên để lại remote_usercho người dùng đăng nhập và thêm các thuộc tính có thể tìm thấy sau vào công việc:

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

1
Tôi hiểu rồi. Cảm ơn rất nhiều vì đã làm rõ điều này! Nhưng làm thế nào để chạy một tác vụ cụ thể như một người dùng cụ thể sau đó?
errata

1
Lưu ý rằng remote_usermặc định cho người dùng hiện tại trong máy cục bộ của bạn - thực sự giống như ssh.
Capi Etheriel

Được rồi, nhưng với một thiết lập như thế này tôi vẫn gặp Missing sudo passwordlỗi ''. Có cách nào để tránh yêu cầu mật khẩu cho người dùng cụ thể đó không?
errata

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời, thêm dòng vào sudoers: ubuntu ALL=(someusername) NOPASSWD: ALLnhưng tôi phải suy nghĩ về bảo mật đằng sau điều này ... Có cách nào khác ngoại trừ thêm dòng này vào sudoers không?
errata

1
cách thích hợp sẽ là để người dùng từ xa của bạn đăng nhập trực tiếp.
Capi Etheriel

16

Lưu ý rằng sau Ansible 1.9, sudotừ ngữ đã được thay thế bằng become, do đó

sudo: yes
sudo_user: some_user

trở thành (ý định chơi chữ):

become: yes
become_user: some_user

Xem thêm chi tiết tại đây: /programming//a/22749788/402727

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.