Ansible設定 · 2 min read · Nov 16, 2025
Ansibleを使用してUbuntu 18.04で新しいユーザーとSSHキー認証を設定する
Ansibleは、ソフトウェアアプリケーションのデプロイ、クラウドプロビジョニング、および構成管理を自動化するシンプルな自動化ツールです。これは、’Control Machines’と呼ばれる単一の場所から多数のサーバーノードを管理および制御するのに役立つサーバーオーケストレーションツールです。Ansibleは2012年にMichael DeHaanによって作成され、PythonとPowershellで記述されています。
このチュートリアルでは、新しいユーザーをデプロイし、Ansibleという自動化ツールを使用してSSHキーに基づく認証を有効にする方法を学びます。また、Ansibleの’Control Machine’を構成する方法や、シンプルなAnsibleプレイブックを書く方法も学びます。
前提条件
- 2台以上のUbuntu 18.04サーバー - 10.0.15.10 control-machine
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- ルート権限
何をするのか?
- Ansible Control Machineのセットアップ
- ユーザーとSSHキーの定義
- インベントリファイルの作成
- Ansibleプレイブックの作成
- プレイブックを使用してサーバーをデプロイ
- テスト
ステップ1 - Ansible Control Machineのセットアップ
このチュートリアルでは、Ansibleの’Machine Control’およびansibleホストとしてUbuntu 16.04サーバーを使用します。最初に行うべきステップは、’control machine’をセットアップすることです。
次のコマンドを実行して、ansible ‘control machine’にpythonとansibleをインストールします。
sudo apt install python ansible -y
インストールが完了したら、新しいシステムユーザーを追加します。
Ansibleを使用してサーバーのプロビジョニングを行うために、’provision’という名前の新しいユーザーを追加します。
新しいユーザー’provision’を追加し、ユーザーにパスワードを設定します。
useradd -m -s /bin/bash provision
passwd provision次に、以下のコマンドを使用して’/etc/sudoers.d/‘の下に新しい構成ファイルを作成し、パスワードなしでsudoを使用できるように’provision’ユーザーを追加します。
echo -e 'provision ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/provision新しいユーザーが作成され、パスワードなしでsudoを使用できるようになりました。

ステップ2 - ユーザーとSSHキーの定義
このステップでは、ansibleホストのユーザーを定義します。このユーザーはansibleによって自動的に作成されるため、ユーザー名、パスワード、およびSSH公開鍵を定義するだけで済みます。
各サーバー(’ansi01’および’ansi02’)に対して、’provision’という名前の新しいユーザーを作成し、パスワード’secret01’を設定します。そして、mkpasswdコマンドを使用して’secret01’パスワードを暗号化する必要があります。
以下のコマンドを使用して’secret01’パスワードを暗号化します。
mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'注意:
システムに’whois’パッケージがインストールされていることを確認してください。インストールされていない場合は、以下のコマンドを使用してインストールできます。
sudo apt install whois -yこれでSHA-512で暗号化されたパスワードが得られます。
次に、新しいsshキーを生成します。
‘provision’ユーザーにログインし、ssh-keygenコマンドを使用してsshキーを生成します。
su - provision
ssh-keygen -t rsaこれでユーザーとパスワードが定義され、sshキーが作成されました(’.ssh’ディレクトリにあります)。

ステップ3 - 新しいインベントリの作成
このステップでは、すべてのサーバーホストのインベントリファイルを定義します。
‘provision’ユーザーとしてログインし、プロジェクト用の新しいディレクトリを作成します。
su - provision
mkdir -p ansible01/‘ansible01’ディレクトリに移動し、vimを使用して新しいインベントリファイル’inventory.ini’を作成します。
cd ansible01/
vim inventory.ini以下の構成をそこに貼り付けます。
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22保存して終了します。
次に、新しいansible構成ファイル’ansible.cfg’を作成します。
vim ansible.cfg以下の構成をそこに貼り付けます。
[defaults]
inventory = /home/provision/ansible01/inventory.ini保存して終了します。

ansibleインベントリファイルが作成され、私たちのansibleスクリプトは’provision’ユーザーの’ansible01’ディレクトリ内に配置されます。
ステップ4 - Ansibleプレイブックの作成
Ansibleプレイブックは、単一またはグループのサーバーホストで実行するために送信する命令のセットです。これはansibleプロビジョニングを表し、自動化がタスクとして定義され、パッケージのインストールやファイルの編集などのすべてのジョブがansibleモジュールによって実行されます。
このステップでは、新しいユーザーをデプロイし、sshキーをデプロイし、sshサービスを構成するための新しいansibleプレイブックを作成します。
新しいansibleプレイブックを作成する前に、ssh-keyscanコマンドを使用してすべてのサーバーフィンガープリントをスキャンします。
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hostsこれらのサーバーフィンガープリントは’.ssh/known_hosts’ファイルに保存されます。

注意:
多くのサーバーノードがある場合は、ホストリストを保存し、bashスクリプトを使用して手動でsshキーのフィンガープリントをスキャンできます。以下のようにします。
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done次に、vimを使用して’deploy-ssh.yml’という名前のansibleプレイブックを作成します。
vim deploy-ssh.yml以下のansibleプレイブックをそこに貼り付けます。
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Add a new user named provision
user:
name=provision
password={{ provision_password }}
- name: Add provision user to the sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Deploy SSH Key
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Disable Password Authentication
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- restart ssh
- name: Disable Root Login
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted保存して終了します。
プレイブックスクリプトでは:
- ‘deploy-ssh.yml’プレイブックスクリプトを作成し、’inventory.ini’ファイルで定義されたすべてのサーバーに適用します。
- 新しいユーザーのための暗号化されたパスワードを含むansible変数’provision_password’を作成します。
- Ansibleのファクトを’no’に設定します。
- タスクの自動化を実行するために’remote_user’として’root’ユーザーを定義します。
- 新しいユーザーを追加し、ユーザーをsudoersに追加し、sshキーをアップロードするための新しいタスクを作成します。
- sshサービスを構成し、rootログインを無効にし、パスワード認証を無効にするための新しいタスクを作成します。sshを構成するタスクは’restart ssh’ハンドラをトリガーします。
- sshサービスを再起動するためのハンドラを作成します。
ステップ5 - プレイブックの実行
‘provision’ユーザーとしてログインし、’ansible01’ディレクトリに移動します。
su - provision
cd ansible01/次に、以下のコマンドを使用して’deploy-ssh.yml’プレイブックを実行します。
ansible-playbook deploy-ssh.yml --ask-passルートパスワードを入力すると、以下のような結果が得られます。

新しいユーザーとsshキーのデプロイに関するすべてのタスクが正常に完了しました。
ステップ6 - テスト
ansibleコマンドを使用してテストします。
ansible webserver -m ping
ansible webserver -m shell -a idこれで以下のような緑のメッセージが表示されます。

これで、Ansibleを使用して’ansi01’および’ansi02’サーバーを管理でき、’provision’ユーザーがAnsibleのデフォルトユーザーになります。
サーバーへの接続をテストします。
ssh 10.0.15.21
ssh 10.0.15.22これで、デフォルトキー’.ssh/id_rsa’ファイルを使用して、ユーザー’provision’で各サーバーに接続されます。


Ansibleを使用して新しいユーザーとsshキーをデプロイする作業は正常に完了しました。
参考
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。