2014-07-14 12 views
5

Tôi gặp một số khó khăn trong việc điều chỉnh cấu hình Ansible cho môi trường của mình.Ansible SSH là một người dùng và Sudo là một người khác

môi trường thử nghiệm của tôi:

  • PermitRootLogin không
  • Chỉ một người dùng được phép kết nối thông qua SSH (foo, mà không cần bất kỳ đặc quyền)
  • Người dùng với đặc quyền sudo (bar ALL = (ALL) ALL)

hàng tồn kho chủ ansible của tôi trông như thế này:

[servers] 
server1 ansible_ssh_host=192.168.0.1 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar 

Tôi có khóa SSH cho người dùng foo.

Khi tôi cố gắng quảng cáo hoc lệnh này (hoặc bất kỳ khác) với mật khẩu thanh:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass 
server1 | FAILED => Incorrect sudo password 

Sau đó, nếu tôi làm lệnh cùng với mật khẩu foo:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass 
Sorry, user foo is not allowed to execute '/bin/bash -c echo SUDO-SUCCESS-rlpfhamukjnsfyokqbjpbttviiuildif; echo test > /etc/testfile' as bar on server1. 

Vì vậy Ansible chắc chắn sử dụng foo như sudo người dùng và không thanh như tôi đã chỉ định. Có cách nào để buộc sử dụng thanh thay vì foo? Tôi thực sự không hiểu các chức năng sudo trên Ansible, thậm chí nếu tôi sử dụng cùng một người dùng cho tất cả mọi thứ (thanh cho SSH và mật khẩu thanh) đưa ra ansible trả tôi:

server1 | FAILED | rc=1 >> 
echo test > /etc/testfile : Permission denied 

Khi tôi đăng nhập như vạch trên của tôi lưu trữ và thực hiện "kiểm tra echo sudo>/etc/testfile" nó hỏi tôi mật khẩu thanh và thực hiện lệnh một cách chính xác. Tôi đang sai với hành vi Ansible ở đâu?

Trả lời

4

nghĩ về nó như thế này:

  • ansible_ssh_user là người sử dụng để ssh vào máy chủ như
  • ansible_sudo_user được người dùng sudo trên máy chủ

Nói cách khác, sử dụng của bạn người dùng và lệnh làm ví dụ, các lệnh tương đương mà ansible sẽ chạy là:

ssh [email protected] sudo -u bar "echo test > testfile"

Do đó, cần cung cấp mật khẩu của người dùng foo, không phải người dùng bar. Người dùng foo sẽ cần đặc quyền đối với sudo là bar. Một cái gì đó như thế này trong sudoers:

foo ALL=(bar) NOPASSWD: ALL 

Bây giờ foo có thể chạy tất cả các lệnh như bar không có mật khẩu.

Các vấn đề liên quan