AnsibleでさくらVPSの初期セットアップを自動化します。
さくらVPSのコンソール画面からOSインストール>カスタムOSインストール
を選択してCentOS7をインストールしておきます。
インストールが開始されると、CentOS7のインストール用コンソール画面(VNCコンソールのHTML5版かJava Applet版)を開くことができるので、環境に合わせて好きな方を選びます。
CentOS7のインストールでは、言語設定やディスクの初期化など行う必要があります。
rootユーザーのパスワード設定と新規ユーザー作成をする画面がありますが、新規ユーザー作成はAnsibleで行うので、rootユーザーのパスワード設定のみだけでOKです。
次に、公開鍵をansibleホスト側からさくらVPSに送ります。(鍵は事前に作成しておいてください。ここでは割愛します。)
こちらの鍵はAnsibleで新規に作成するユーザー用の鍵です。ssh-copy-id -i ~/.ssh/id_rsa.pub root@123.45.678.910
ssh root@123.45.678.901
でさくらVPSにssh接続できれば準備OKです。
hosts
[sakura]
123.45.678.910 ansible_ssh_user=root ansible_ssh_private_key_file=~/.ssh/id_rsa
タスク内容はこんな感じです。
1点注意点があります。ssh_user_password
はopenssl
で暗号化したものを指定する必要があります。
openssl passwd -salt hoge -1 moge
Playbookは参考サイトを大いに参考にさせて頂きました。m( )m
init.yml
---
- hosts: sakura
become: yes
user: root
vars:
ssh_user: bmf
ssh_user_password: hogehogemogemoge
ssh_port: 50055
tasks:
- name: Add a new user
user:
name="{{ ssh_user }}"
groups=wheel
password="{{ ssh_user_password }}"
generate_ssh_key=yes
ssh_key_bits=2048
- name: Create an authorize_keys file
command: /bin/cp /home/{{ ssh_user }}/.ssh/id_rsa.pub /home/{{ ssh_user}}/.ssh/authorized_keys
- name: Change attributes of an authorized_keys file
file:
path: /home/{{ ssh_user }}/.ssh/authorized_keys
owner: "{{ ssh_user }}"
group: "{{ ssh_user }}"
mode: 0600
- name: Allow wheel group to use sudo
lineinfile:
dest: /etc/sudoers
state: present
insertafter: "^# %wheel\\s+ALL=\\(ALL\\)\\s+NOPASSWD:\\s+ALL"
line: "%wheel ALL=(ALL) NOPASSWD: ALL"
validate: "visudo -cf %s"
backup: yes
- name: Forbid root to access via ssh
lineinfile:
dest: /etc/ssh/sshd_config
state: present
regexp: "^PermitRootLogin without-password"
line: "PermitRootLogin no"
backrefs: yes
validate: "sshd -T -f %s"
backup: yes
notify:
- restart sshd
- name: Permit only specific user to access via ssh
lineinfile:
dest: /etc/ssh/sshd_config
state: present
insertafter: "^PasswordAuthentication no"
regexp: "^AllowUsers"
line: "AllowUsers {{ ssh_user }}"
validate: "sshd -T -f %s"
backup: yes
notify:
- restart sshd
- name: Change ssh port number
lineinfile:
dest: /etc/ssh/sshd_config
state: present
insertafter: "^#Port 22"
regexp: "^Port"
line: "Port {{ ssh_port }}"
validate: "sshd -T -f %s"
backup: yes
notify:
- restart sshd
- name: Change acceptable tcp port for ssh on iptables
firewalld: port={{ ssh_port }}/tcp permanent=true state=enabled immediate=yes
- name: shutdown ssh port
firewalld: service=sshd permanent=true state=disabled immediate=yes
- name: disable selinux
selinux: state=disabled
ハンドラーを定義します。
main.yml
---
- name: restart sshd
service: name=iptables start restarted
ansible-playbook sakura.yml -i hosts -k -c paramiko
タスクの実行が全て完了したら、サーバーを一度再起動して完了です。