Jay*_*dse 61 sudoers ansible-playbook
我接管了一台Ubuntu 14.04服务器.它有一个名为"deployer"的用户(与capistrano一起使用),因此需要sudo权限.通过此设置,我可以登录服务器并执行以下操作:
workstation> ssh deployer@myserver
myserver> sudo apt-get install git
myserver> exit
workstation>
Run Code Online (Sandbox Code Playgroud)
我试图找出如何使用Ansible(版本2.0.2.0和python 2.7.3)来创建一个名为"deployer"的用户,并能够使用该id登录到服务器然后sudo-ish之类的事情,如"apt --get install".我的剧本看起来像这样:
---
- hosts: example
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- group: name=sudo state=present
- name: Add deployer user and add it to sudo
user: name=deployer
state=present
createhome=yes
become: yes
become_method: "sudo"
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/jaygodse/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)
运行这个剧本之后,我能够以"deployer"的形式进入机器,(例如ssh deployer @ myserver)但是如果我运行sudo命令,它总是要求我输入我的sudo密码.
我理解"deployer"用户最终必须找到进入visudo用户文件的方式,但是我无法弄清楚要调用哪个神奇的Ansible咒语以便我可以作为部署者ssh进入机器然后运行sudo命令(例如sudo) apt-get install git")没有提示输入sudo密码.
我已经搜索了高低,我似乎无法找到一个Ansible playbook片段,它将用户"deployer"放入sudo组而不需要密码.这是怎么做到的?
Jay*_*dse 107
有时它知道该问什么.我不知道,因为我是开发人员,他接受了DevOps的一些工作.
显然,'无密码'或NOPASSWD登录是你需要放在/ etc/sudoers文件中的东西.
我的问题的答案是在Ansible:维护sudoers列表的最佳实践.
Ansible playbook代码片段从我的问题看起来像这样:
- name: Make sure we have a 'wheel' group
group:
name: wheel
state: present
- name: Allow 'wheel' group to have passwordless sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Add sudoers users to wheel group
user: name=deployer groups=wheel append=yes state=present createhome=yes
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/railsdev/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)
最好的部分是解决方案是幂等的.它不添加该行
%wheel ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
当playbook随后运行时,到/ etc/sudoers.是的...我能够以"deployer"的形式进入服务器并运行sudo命令而无需提供密码.
pal*_*lxk 19
要创建使用sudo权限的用户是把用户进入/etc/sudoers,或让用户指定一个组的成员/etc/sudoers。并使其无密码是NOPASSWD在/etc/sudoers.
示例/etc/sudoers:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
而不是摆弄/etc/sudoers文件,我们可以在/etc/sudoers.d/目录中创建一个新文件,因为该目录/etc/sudoers默认包含在内,这样既避免了破坏现有 sudoers 文件的可能性,也消除了对/etc/sudoers.
要在 Ansible 中实现上述功能,请参考以下内容:
- name: sudo without password for wheel group
copy:
content: '%wheel ALL=(ALL:ALL) NOPASSWD:ALL'
dest: /etc/sudoers.d/wheel_nopasswd
mode: 0440
Run Code Online (Sandbox Code Playgroud)
您可以替换%wheel为其他组%sudoers名,如deployer.
| 归档时间: |
|
| 查看次数: |
76818 次 |
| 最近记录: |