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シリーズ