GNU/Linux >> Linux の 問題 >  >> Ubuntu

新規ユーザーとSSHキー認証を設定します。 Ubuntu18.04でAnsibleを使用する

Ansibleは、ソフトウェアアプリケーションの展開、クラウドプロビジョニング、および構成管理を自動化するシンプルな自動化ツールです。これは、「コントロールマシン」と呼ばれる単一の場所から多数のサーバーノードを管理および制御するのに役立つサーバーオーケストレーションツールです。 Ansibleは2012年にMichaelDeHaanによって作成され、PythonとPowershellで記述されています。

このチュートリアルでは、自動化ツールAnsibleを使用して、新しいユーザーをデプロイし、SSHキーベースの認証を有効にする方法を学習します。また、Ansibleの「ControlMachine」を構成する方法と、簡単なansibleプレイブックを作成する方法についても学習します。

前提条件
  • 2台以上のUbuntu18.04サーバー
    • 10.0.15.10制御マシン
    • 10.0.15.21 ansi01
    • 10.0.15.22 ansi02
  • root権限

何をしますか?

  1. AnsibleControlMachineのセットアップ
  2. ユーザーとSSHキーを定義する
  3. インベントリファイルの作成
  4. AnsiblePlaybookを作成する
  5. Playbookを使用してサーバーをデプロイする
  6. テスト
ステップ1-Ansibleコントロールマシンをセットアップする

このチュートリアルでは、Ubuntu16.04サーバーをAnsibleの「マシンコントロール」およびansibleホストとして使用します。最初に行う必要があるのは、「制御マシン」をセットアップすることです。

次のコマンドを実行して、Pythonとansibleをansibleの「コントロールマシン」にインストールします。

sudo apt install python ansible -y

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

Ansibleを使用してサーバープロビジョニングを実行するために、「provision」という名前の新しいユーザーを追加します。

新しいユーザー「プロビジョニング」を追加し、ユーザーにパスワードを与えます。

useradd -m -s /bin/bash provision
passwd provision

次に、以下のコマンドを使用して「/etc/sudoers.d/」の下に新しい構成ファイルを作成し、パスワードなしでsudoの「provision」ユーザーを追加します。

echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision

新しいユーザーが作成され、パスワードなしでsudoを使用できるようになりました。

ステップ2-ユーザーとSSHキーを定義する

このステップでは、ansibleホストのユーザーを定義します。このユーザーはansibleによって自動的に作成されるため、ユーザー名、パスワード、およびssh公開鍵を定義するだけで済みます。

サーバー(「ansi01」および「ansi02」)ごとに、パスワード「secret01」を使用して「provision」という名前の新しいユーザーを作成します。そして、mkpasswdコマンドを使用して「secret01」パスワードを暗号化する必要があります。

以下のコマンドを使用して、「secret01」パスワードを暗号化します。

mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'

注:

'whois'パッケージがシステムにインストールされていることを確認するか、次のコマンドを使用してインストールできます。

sudo apt install whois -y

そして、SHA-512暗号化パスワードを取得します。

次に、新しいssh-keyを生成します。

'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スクリプトは、「ansible01」ディレクトリ内の「provision」ユーザーの下に配置されます。

ステップ4-AnsiblePlaybookを作成する

Ansible Playbookは、単一またはグループのサーバーホストで実行するために送信する一連の命令です。これは、自動化がタスクとして定義され、パッケージのインストール、ファイルの編集などのすべてのジョブが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

保存して終了します。

プレイブックスクリプトについて:

  • 「inventory.ini」ファイルで定義されているすべてのサーバーに適用される「deploy-ssh.yml」プレイブックスクリプトを作成します。
  • 新しいユーザーの暗号化されたパスワードを含むansible変数「provision_password」を作成します。
  • Ansibleファクトを「no」に設定します。
  • タスクの自動化を実行するためのリモートユーザーとして「root」ユーザーを定義します。
  • 新しいユーザーを追加するための新しいタスクを作成し、ユーザーをsudoersに追加して、sshキーをアップロードします。
  • sshサービスを構成し、ルートログインを無効にし、パスワード認証を無効にするための新しいタスクを作成します。 sshを設定するためのタスクは、「restartssh」ハンドラーをトリガーします。
  • 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-keyのデプロイが正常に完了しました。


Ubuntu
  1. Ubuntu14.04でのサーバーの初期設定

  2. Ubuntu16.04で証明書と事前共有キーを使用するStrongSwanベースのIPsecVPN

  3. 2画面セットアップでUbuntuを使用していますか?

  1. Ansibleを使用してUbuntu20.04にRedis6をインストールおよび構成する方法

  2. Ansibleを使用してUbuntu20.04にElasticsearchをインストールおよび構成する

  3. Ubuntu 20.04 での SFTP のセットアップと SSH の防止

  1. Ubuntu18.04でSSHキーを設定する方法

  2. Ubuntu20.04でSSHキーを設定する方法

  3. Ubuntu20.04にOpenVPNサーバーをインストールしてセットアップする