Ansible でサーバー初期設定してみる! ansible-playbook ユーザー追加, ssh key設定, sshd port変更

redhad ansible
https://ansible.com
Automation for everyone

Ansible Install

Install
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#basics-what-will-be-installed

$ sudo yum install ansible

自分のMacの場合

$ sudo pip3 install ansible
i$ ansible --version
ansible 2.9.2
  config file = None
  configured module search path = ['/Users/junichi/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/3.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.3 (default, Sep 18 2019, 14:29:06) [Clang 11.0.0 (clang-1100.0.33.8)]

パスワードハッシュ用に利用する crypt.crypt が使えないらしく

$ sudo pip install passlib

ユーザー作成

 # ansible-galaxy init useradd

こんな感じに、id_key.pub は、そのユーザー用に設定する公開鍵です。

$ tree useradd/
useradd/
├── README.md
├── defaults
│   └── main.yml
├── files
│   └── id_key.pub
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

実行するタスクを設定

$ vim useradd/tasks/main.yml

---
# tasks file for useradd
- name: Create user
  become: true
  user:
      name: "{{ item.name }}"
      password: "{{ item.password }}"
      groups: "{{ item.groups }}"
      shell: /bin/bash
  with_items:
      - "{{ users }}"
- name: Set authorized key taken from file
  become: true
  authorized_key:
      user: testuser
      state: present
      key: '{{ item }}'
  with_file:
      - files/id_key.pub

ユーザー情報をvarsに設定(ここのパスワードハッシュでcrypt.cryptが必要(前述のpasslib)

$ vim useradd/vars/main.yml 

---
# vars file for useradd
users:
    name: 'testuser'
    uid: '1001'
    groups: 'users,wheel'
    password: "{{ 'パスワード'|password_hash('sha512') }}"

実行ファイル

$ vim init_useradd.yml
---
- hosts: all
  roles:
    - useradd

SSH key認証で接続

$ vim inventory

[target]
255.255.255.255 ansible_connection=ssh ansible_user=centos ansible_ssh_private_key_file=/Users/test/.ssh/id_key

構文確認

$  ansible-playbook -i inventory init_user.yml --syntax-check

playbook: init_user.yml

実行

$  ansible-playbook -i inventory init_user.yml 

PLAY [all] *********************************************************************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************************************************************
ok: [255.255.255.1]

TASK [useradd : Create user] ***************************************************************************************************************************************************************************
changed: [255.255.255.1] => (item={'name': 'testuser', 'uid': '1001', 'groups': 'users,wheel', 'password': 'passwordhash'})

TASK [useradd : Set authorized key taken from file] ****************************************************************************************************************************************************
ok: [255.255.255.1] => (item=ssh-rsa ssh pub key strings testuser@localhost)

PLAY RECAP *********************************************************************************************************************************************************************************************
255.255.255.1             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

これで無事、追加したユーザーでログインできました。

SSH ポート変更

22だと頻繁にアタックが来るのでほかのポート例えば22222に変更します。

初期設定のロールのタスクに一緒に追加しています。
tasks/main.yml に以下のタスクを追加
SELinuxの場合は、seport 設定も必要です。

- name: Change SSH Port
  lineinfile:
    dest: "/etc/ssh/sshd_config"
    regexp: "^#Port"
    line: "Port 12222"
  notify: "Restart sshd"

- name: Set alternate port for SSH SELinux
  seport:
    ports: "12222"
    proto: "tcp"
    setype: "ssh_port_t"
    state: "present"

handlers/main.yml に sshd restart を追加

---
# handlers file for basemodules
- name: Restart sshd
  service:
    name: sshd
    state: restarted

ポート変更後に接続確認しておく
inventoryの設定に  ansible_ssh_port=12222  を追加しました。
実際には、22用の inventory_22 と 12222用の inventoryを用意しました。
22の方は最初にしか利用しませんが。

$ ansible-playbook -i inventory test_hello.yml 

PLAY [all] *********************************************************************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************************************************************
ok: [255.255.255.255]

TASK [helloworld : Hello World!] ***********************************************************************************************************************************************************************
ok: [255.255.255.255] => {
    "msg": "Hello World!"
}

PLAY RECAP *********************************************************************************************************************************************************************************************
255.255.255.255             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

とりあえず、sshの設定まで。次はiptableを。


WebARENAのindigo VPSを利用してみているのですが、
今のところ4円です^^

WebARENA indigo VPS

コメントを残す

メールアドレスが公開されることはありません。

お気軽にコメントいただけると嬉しいです!
質問や気になる商品・サービスなどについてなんでも!
名前はハンドルネーム、emailも仮で適当な文字を入力いただければ問題ありません。