Ansibleで管理対象のLinuxサーバにパスワードなしで接続可能にする!

Ansibleで管理するLinuxサーバに対して、パスワード入力なしで接続できるように設定します。本稿では、SSH接続に対しては鍵認証を使用し、管理者権限の使用に関しては、sudoの設定を変更して実現します。

Ansibleで初回接続する前提を確認する!

Ansibleで初回接続するための前提を整理します。本稿では、以下を想定します。

  • OS(Linux)のインストールが完了している。
  • SSHサーバのインストールが完了している。
  • ansibleで接続するユーザが作成済である。(パスワードも設定済み)
  • SSHで鍵認証でログインするための公開鍵、秘密鍵が作成済みである。

SSHで鍵認証でログインするための公開鍵、秘密鍵が作成については、以下の記事を参照して作成します。

 

Ansibleの初回接続で設定する内容を整理する!

Ansibleでサーバの管理を行い際に、毎回接続用のパスワード、管理者権限を使用するためのパスワードを入力するのは煩雑です。Ansibleによる初回の設定を行い、以降はパスワード無しで、管理者権限で管理対象のサーバをAnsibleで制御可能にします。具体的には、以下の設定を行います。

  • パスワードの入力なしで、SSHで鍵認証でログイン可能にする。
  • パスワードの入力なしで、sudo可能にする。

Playbookを用意する!

上記を実現するためのPlaybookを用意します。用意済みのSSHの公開鍵「authorized_keys」の配布と、sudoファイルへの定義の追加を行います。本稿では、作成済みのSSHの公開鍵を配布するために、「authorized_keys」を鍵を管理するサーバから入手して、「/home/usradmin/doc/authorized_keys/authorized_keys」に配置しています。

$ cat setup_s1_servers_linux.yml
---
- hosts: servers_linux
  tasks: 
  - name: create directories usradmin .ssh
    ansible.builtin.file:
      path: /home/usradmin/.ssh
      mode: "0700"
      state: directory
      owner: usradmin
      group: usradmin
  - name: transfer file authorized_keys
    ansible.builtin.copy:
      src: /home/usradmin/doc/authorized_keys/authorized_keys
      dest: /home/usradmin/.ssh/authorized_keys
      owner: usradmin
      group: usradmin
      mode: "0644"

- hosts: servers_linux
  become: true
  tasks: 
  - name: add line to /etc/sudoers
    ansible.builtin.lineinfile:
      path: /etc/sudoers
      line: "usradmin ALL=(ALL:ALL) NOPASSWD:ALL"

Playbookを実行する!

Playbookを実行して設定を行います。毎回実行するので、以下のようにシェル化してみました。ポイントは、ログインパスワードの入力とsudoのパスワード入力が必要になるので、「--ask-pass」と「--ask-become-pass」のオプションを指定しています。

$ cat setup_s1_servers_linux.sh
#!/bin/bash

INI_FILE=inventory.ini
PLB_FILE=setup_s1_servers_linux.yml

ansible-playbook -i $INI_FILE $PLB_FILE --ask-pass --ask-become-pass

おわりに

Ansibleで接続するための設定は、サーバ構築のたびに実行する作業なので、自動化すると便利です。また、パスワード入力は、初回のみが要になる作業なので、パスワード入力が不要な後続の設定作業とPlaybookを分けて作成してみました。

参考情報

関連記事

Ansible書籍(Amazon)

Ansible実践ガイド 第3版 impress top gearシリーズ

Ansibleクックブック impress top gearシリーズ