ウェブサイト検索

Ansible 管理対象ノードを構成してアドホック コマンドを実行する方法 - パート 3


この Ansible シリーズの前 2 つの記事では、Ansible のコア コンポーネントと Ansible コントロール ノードのセットアップについて説明しました。このパート 3 では、リモートホスト上でアドホックコマンドを実行するように Ansible 管理対象ノードを構成する方法を説明します。

Ansible 管理対象ノードへのパスワードレス SSH 認証のセットアップ

最後のトピックの要約として、Ansible を使用してリモート ホストを管理するには、Ansible コントロール ノードと管理対象ホストの間でパスワードレス SSH 認証を設定する必要があります。これには、Ansible Control ノードでのキー ペア (SSH 公開キーと秘密 SSH キーのペア) の生成と、公開キーのすべてのリモート ホストへのコピーが含まれます。これは今後の重要なステップとなり、作業がはるかに簡単になります。

管理対象ノードでの権限昇格の構成

通常のユーザーとしてログインすると、管理対象ノード上で昇格された権限または root 権限を必要とする特定のタスクを実行する必要がある場合があります。これらのタスクには、ほんの数例を挙げると、パッケージ管理、新しいユーザーとグループの追加、システム構成の変更などが含まれます。これを実現するには、プレイブックで特定のディレクティブを呼び出して、リモート ホスト上で特権ユーザーとしてタスクを実行する必要があります。

なる

Ansible を使用すると、現在ログインしているユーザーとは異なる管理対象ノード上の別のユーザーに「なる」ことができます。 become:yes ディレクティブにより権限が昇格され、以下のタスクを実行できるようになります。パッケージのインストールと更新、システムの再起動などには root 権限が必要です。

次に示すように、Apache Web サーバーをインストールして起動するプレイブック httpd.yml について考えてみましょう。

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

become:yes ディレクティブを使用すると、リモート ホスト上で root ユーザーとしてコマンドを実行できます。

become_user

別のユーザーになるために使用できるもう 1 つのディレクティブは、become_user です。これにより、ログイン時に、ログイン時に使用したユーザーではなく、リモート ホスト上の sudo ユーザーに切り替えることができます。

たとえば、 リモート上でtecmint ユーザーとしてコマンドを実行するには、次のようにディレクティブを使用します。

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

become_メソッド

このディレクティブは、通常は sudo に設定される ansible.cfg ファイルに設定されているデフォルトのメソッドをオーバーライドします。

become_flags

これらは、シェルが nologin に設定されているときにユーザーに切り替える必要がある場合など、プレイ レベルまたはタスク レベルで使用されます。

例えば、

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

権限昇格のコマンドライン オプション

コマンドの実行時に権限を昇格するために使用できるコマンドライン オプションのいくつかを見てみましょう。

  • --ask-become-pass-K – これにより、接続しようとしているリモート システム上の sudo ユーザーのパスワードの入力が求められます。
ansible-playbook myplaybook.yml --ask-become-pass

  • --become-b – これにより、パスワードの入力を求められずに root ユーザーとしてタスクを実行できます。
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – 別のユーザーとしてタスクを実行できます。
ansible-playbook myplaybook.yml --become-user=tecmint

アドホック Ansible コマンドを使用して動作する構成を検証する

場合によっては、必ずしも Playbook を作成することなく、Ansible のリモートホストまたはサーバー上で素早く簡単なタスクを実行したい場合があります。その場合はアドホックコマンドを実行する必要があります。

アドホックコマンドとは何ですか?

Ansible のアドホック コマンドは、プレイブックを作成せずに、単純かつ効率的な方法で単純なタスクを実行するのに役立つ 1 行のコマンドです。このようなタスクには、ホスト間でのファイルのコピー、サーバーの再起動、ユーザーの追加と削除、単一パッケージのインストールなどが含まれます。

このチュートリアルでは、Ansible Ad-Hoc コマンドのさまざまなアプリケーションを検討します。デモには以下のインベントリ ファイルを使用します。

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

アドホックコマンドの基本的な使い方

Ansible-Adhoc コマンドの最も基本的な使用法は、ホストまたはホストのグループに ping を送信することです。

ansible -m ping all

上記のコマンドでは、-m パラメーターがモジュール オプションです。 Ping はアドホック コマンドで、2 番目のパラメータ all はインベントリ ファイル内のすべてのホストを表します。コマンドの出力を以下に示します。

ホストの特定のグループに ping を実行するには、「all」 パラメータをグループ名に置き換えます。以下の例では、webservers グループの下のホストとの接続をテストしています。

ansible -m ping webservers

さらに、 -a 属性を使用して、通常の Linux コマンドを二重引用符で囲んで指定できます。たとえば、リモート システムのシステム稼働時間を確認するには、次を実行します。

ansible -a "uptime" all

リモート ホストのディスク使用量を確認するには、次のコマンドを実行します。

ansible -a "df -Th" all

Adhoc コマンドで使用できるモジュールは何百もあります。モジュールのリスト全体とその説明を表示するには、以下のコマンドを実行します。

ansible-doc -l

特定のモジュールに関する詳細情報を表示するには、コマンドを実行します。

ansible-doc module_name

たとえば、yum モジュール の詳細を検索するには、次のコマンドを実行します。

ansible-doc yum

Ansible を使用したパッケージ/サービスの管理

Ansible アドホック コマンドは、yum および apt パッケージ マネージャーを使用したパッケージのインストールと削除に使用できます。

インベントリ ファイルの webservers グループの下のCentOS 7 ホストに Apache Web サーバーをインストールするには、次のコマンドを実行します。

ansible webservers -m yum -a "name=httpd  state=present"

Apache Web サーバーのインストールを確認するには、リモート クライアントにログインして実行します。

rpm -qa | grep httpd

Apache をアンインストールするには、 状態を存在から存在に変更するだけです。

ansible webservers -m yum -a "name=httpd  state=absent"

もう一度、httpd の削除を確認するために実行します。

rpm -qa | grep httpd

ご覧のとおり、Apache Web サーバー パッケージはパージされています。

Ansible を使用したユーザーとグループの作成

ユーザーを作成するときは、「user」モジュールが便利です。クライアント システムの database_server 上にパスワード redhat を持つ新しいユーザー james を作成するには、次のコマンドを発行します。

ansible database_server -m user -a "name=james password=redhat"

新しいユーザーの作成を確認するには、次のコマンドを実行します。

ansible database_servers -a "id james"

ユーザーを削除するには、次のコマンドを実行します。

ansible database_servers -m user -a "name=james state=absent"

権限昇格

Ansible を通常のユーザーとして実行している場合、Ansible は、--become オプションを使用して root 権限を取得し、-k を使用してパスワードの入力を求めるリモート ホストでの権限昇格を提供します。

たとえば、特権オプション –-become とオプション -K を指定して Ansible アドホック コマンド 'netstat -pnltu' を実行すると、コマンドを実行するための root ユーザーのパスワード。

ansible webservers -m shell -a 'netstat -pnltu' --become -K

root 以外の別のユーザーになるには、--become-user 属性を使用します。

たとえば、リモート ホストで tecmint ユーザーとして「df -Th」を実行し、パスワードの入力を求めるには、次のコマンドを実行します。

ansible all -m shell -a 'df -Th' --become-user tecmint -K

ホスト システムに関する事実の収集

事実は、システムに関する詳細情報を指します。これには、IP アドレス、システム アーキテクチャ、メモリ、CPU などの情報が含まれます。

リモート ホストに関する情報を取得するには、次のコマンドを実行します。

ansible all -m setup 

ファイル転送/ファイルのコピー

Ansible はモジュール copy を使用して、Ansible コントロールから複数のリモート ホストにファイルを安全にコピーします。

以下はコピー操作の例です。

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

このコマンドは、Ansible Control ノードの /var/log/secure ファイルを、/tmp 宛先の Webservers グループのリモート ホストにコピーします。

ファイル モジュールを使用して、アクセス許可とファイルの所有権を変更できます。

ansible webservers -m file -a "dest=/tmp/secure mode=600"

さらに、次のように所有者とグループの引数を追加できます。

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

示されているように、mkdir -p と同様の方法でディレクトリを作成することもできます。

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

例えば、

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

結論

この記事では、Ansible アドホック コマンドを実行してリモート ホストを管理するように管理対象ノードを構成する方法について説明します。お役に立てば幸いです。試してみて、どうだったか教えてください。