AnsibleでUbuntuに接続可能にする
プレイブックの実行
ansible-playbook add-user-ssh.yml -i hosts
インベントリファイル「hosts」
初期設定を行うinitグループを設定する。
- ansible_user/ansible_passwordは対象Ubuntuのログインユーザ、パスワード
- ansible_become_passwordはsudo時のパスワード
1 2 3 4 5 6 7 8 9
| [init] target
[init:vars] ansible_python_interpreter=/usr/bin/python3 ansible_port=22 ansible_user=※ユーザ名※ ansible_password=※パスワード※ ansible_become_password=※パスワード※
|
プレイブック「add-user-ssh.yml」
Ansible用のユーザ追加とSSHDの初期設定を行う。
- lookup(‘env’,’XXXXX’)はAnsible実行ホストの環境変数を参照する
- sudo実行可能なユーザとして
ANSIBLE_USERNAME
で指定したユーザを追加する
- 追加したユーザにSSH用の公開鍵を登録する
- SSHDのポート番号変更やルートログイン禁止の設定を行いsshdをリスタートする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| --- - hosts: init
vars: - ansible_user_name: "{{ lookup('env', 'ANSIBLE_USERNAME') }}" - ansible_user_password: "{{ lookup('env', 'ANSIBLE_PASSWORD') }}" - sshd_port: "{{ lookup('env', 'SSHD_PORT') }}" gather_facts: no become: true
tasks: - name: Add a new user named {{ ansible_user_name }} user: name: "{{ ansible_user_name }}" shell: /bin/bash password: "{{ ansible_user_password }}" - name: Add ansible user to the sudoers copy: dest: "/etc/sudoers.d/{{ ansible_user_name }}" content: "{{ ansible_user_name }} ALL=(ALL) NOPASSWD: ALL" - name: Deploy SSH Key authorized_key: user: "{{ ansible_user_name }}" key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" state: present
- name: Change port to {{ sshd_port }} lineinfile: dest: /etc/ssh/sshd_config regexp: "^Port" insertafter: "^#Port" line: "Port {{ sshd_port }}"
- name: Disable Root Login lineinfile: dest: /etc/ssh/sshd_config regexp: "^PermitRootLogin" line: "PermitRootLogin no" state: present backup: yes notify: - restart sshd
handlers: - name: restart sshd service: name: sshd state: restarted
|
発生したエラーと対策
エラー「sudo: a password is required」
sudoのパスワードが指定されていない。
1
| fatal: [target]: FAILED! => {"changed": false, "module_stderr": "Shared connection to target closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
|
ansible_become_passwordでsudoパスワードを指定する
エラー「/usr/bin/python: not found」
pythonが見つからない。
ansible_python_interpreter=/usr/bin/python3
でpythonのパスを明示する
1
| fatal: [target]: FAILED! => {"changed": false, "module_stderr": "Shared connection to target closed.\r\n", "module_stdout": "\r\n/bin/sh: 1: /usr/bin/python: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}
|