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
  • ルート権限

何をするのか?

  1. Ansible Control Machineのセットアップ
  2. ユーザーとSSHキーの定義
  3. インベントリファイルの作成
  4. Ansibleプレイブックの作成
  5. プレイブックを使用してサーバーをデプロイ
  6. テスト

ステップ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 Control Machineのセットアップ

インストールが完了したら、新しいシステムユーザーを追加します。

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’ファイルに保存されます。

Ansibleプレイブックの作成

注意:

多くのサーバーノードがある場合は、ホストリストを保存し、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のテスト

これで、Ansibleを使用して’ansi01’および’ansi02’サーバーを管理でき、’provision’ユーザーがAnsibleのデフォルトユーザーになります。

サーバーへの接続をテストします。

ssh 10.0.15.21  
ssh 10.0.15.22

これで、デフォルトキー’.ssh/id_rsa’ファイルを使用して、ユーザー’provision’で各サーバーに接続されます。

サーバー接続のテスト

別のテスト

Ansibleを使用して新しいユーザーとsshキーをデプロイする作業は正常に完了しました。

参考

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。