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


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

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

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

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

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

Ansibleを使用すると、現在ログインしているノードとは異なる管理対象ノードで別のユーザーになることができます。 become:yes ディレクティブを使用すると、権限が昇格し、インストールやパッケージの更新とシステムの再起動。

次のように、ApacheWebサーバーをインストールして起動するプレイブック 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です。これにより、ログイン時に、ログイン時にユーザーではなく、リモートホスト上のsudoユーザーに切り替えることができます。

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

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

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

これらは、たとえばシェルが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 – This prompts you for the password of the sudo user on the remote system that you are trying to connect.
$ ansible-playbook myplaybook.yml --ask-become-pass
  • --become, -b – This allows you to run the task as a root user without prompting for a password.
$ ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – It allows you to run tasks as another user.
$ ansible-playbook myplaybook.yml --become-user=tecmint

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

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

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

このチュートリアルでは、Ansibleアドホックコマンドのさまざまなアプリケーションについて説明します。以下のインベントリファイルをデモンストレーションに使用します。

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

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

# ansible -m ping all

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

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

# ansible -m ping webservers

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

# ansible -a "uptime" all

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

# ansible -a "df -Th" all

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

# ansible-doc -l

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

# ansible-doc module_name

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

# ansible-doc yum

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

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

# 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"

繰り返しますが、httpdrunの削除を確認します。

# rpm -qa | grep httpd

観察されたように、ApacheWebサーバーパッケージは削除されました。

ユーザーを作成するときは、「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は、モジュールコピーを使用して、Ansibleコントロールから複数のリモートホストにファイルを安全にコピーします。

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

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

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