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でサーバーにログインしてからSudoにログインできるようにする方法を見つけようとしています。 -「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
このプレイブックを実行した後、「deployer」としてマシンにsshすることができます(例:ssh deployer @ myserver)が、Sudoコマンドを実行すると、常にSudoパスワードを要求されます。
「deployer」ユーザーは最終的にvisudo usersファイルに移動する必要があることを理解していますが、どの魔法のAnsible呪文を呼び出すべきかを把握できません。 apt-get install git ")Sudoパスワードの入力を求められることなく。
私は高低を検索しましたが、パスワードを必要とせずにユーザー「デプロイヤ」をSudoグループに入れるAnsibleプレイブックフラグメントを見つけることができないようです。これはどのように行われますか?
時々、それは何を尋ねるべきかを知っています。私は開発者であり、DevOpsのいくつかの仕事に携わっているので、知りませんでした。
どうやら「パスワードなし」またはNOPASSWDログインは、/ etc/sudoersファイルに入れる必要があるものです。
私の質問に対する答えは Ansible:sudoersのリストを維持するためのベストプラクティス です。
Ansibleプレイブックのコードフラグメントは、私の問題から次のようになります。
- 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に。そして、はい...パスワードを入力せずに「デプロイヤ」としてサーバーにsshし、Sudoコマンドを実行することができました。
Sudo特権を持つユーザーを作成するには、ユーザーを/etc/sudoers
に入れるか、ユーザーを/etc/sudoers
で指定されたグループのメンバーにします。そして、パスワードなしにするには、/etc/sudoers
でNOPASSWD
を追加で指定します。
/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
に含まれているためです。また、/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
などの他のユーザー名に置き換えることができます。