我接管了一台Ubuntu 14.04服务器。它有一个名为" deployer" (与capistrano一起使用),因此,它需要sudo权限。通过此设置,我可以登录服务器并执行以下操作:
workstation> ssh deployer@myserver
myserver> sudo apt-get install git
myserver> exit
workstation>
我试图弄清楚如何使用Ansible(版本2.0.2.0和python 2.7.3)来创建一个名为" deployer"并且能够使用该id登录到服务器,然后就像" apt-get install"这样的sudo-ish之类的东西。我的剧本看起来像这样:
---
- 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
运行此剧本后,我能够以#34; deployer"(例如ssh deployer @ myserver)进入机器,但如果我运行sudo命令,它总是要求我输入我的sudo密码。
我理解"部署者"用户最终必须找到进入visudo用户文件的方式,但我无法弄清楚调用哪个神奇的Ansible咒语,以便我可以作为部署者ssh进入机器然后运行sudo命令(例如sudo apt-get install git&#34 ;)没有提示输入sudo密码。
我已经搜索过高低,我似乎无法找到一个Ansible playbook片段,它将用户" deployer"进入sudo组而不需要密码。这是怎么做到的?
答案 0 :(得分:94)
有时它知道该问什么。我不知道,因为我是开发人员,他接受了DevOps的一些工作。
显然,'无密码'或NOPASSWD登录是您需要放在/ etc / sudoers文件中的东西。
我的问题的答案是Ansible: best practice for maintaining list of 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
最好的部分是解决方案是幂等的。它不添加行
%wheel ALL=(ALL) NOPASSWD: ALL
到/ etc / sudoers后续时间运行剧本。是的...我能够以“deployer”的形式进入服务器并运行sudo命令而无需提供密码。
答案 1 :(得分:1)
创建具有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
我们可以在/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
您可以将%wheel
替换为其他组名,例如%sudoers
或其他用户名,例如deployer
。
答案 2 :(得分:-6)
使用visudo,按Shift+G
并附加到文件末尾:
deployer ALL=(ALL) NOPASSWD: ALL
然后写并退出(:wq
)