Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

JunosデバイスでAnsibleモジュールを実行しているユーザーの認証

認証の概要

ジュニパーネットワークスは、Junosデバイスの管理に使用できるAnsibleモジュールを提供しています。ジュニパーネットワークスのモジュールは、Ansible GalaxyでホストされているコレクションとJuniper.junosロールを通じてjuniper.device配布されます。

ジュニパーネットワークスのモジュールでは、SSH、Telnet、またはシリアルコンソール接続を使って、Junosデバイスに直接接続し、管理することができます。このモジュールは、デバイスの CONSOLE ポートに接続されているコンソール サーバーへの SSH または Telnet 接続を介したデバイスへの接続もサポートしています。リモートデバイスは、接続プロトコルに応じて、パスワードまたはその他の標準SSH認証メカニズムを使用してユーザーを認証できる必要があります。

Ansibleを使用してJunosデバイスを管理する場合、デバイスにアクセスする最も便利な方法は、SSHキーを設定することです。SSHキーにより、リモートデバイスは信頼できるユーザーを識別できます。または、モジュールとプレイブックを実行するときにユーザー名とパスワードを指定することもできます。

SSH接続の場合、ジュニパーネットワークスモジュールは、まずSSH公開キーベースの認証を試行し、次にパスワードベースの認証を試みます。SSHキーが使用されている場合、提供されたパスワードがプライベートSSHキーのロックを解除するためのパスフレーズとして使用されます。パスワードベースの認証を使用する場合、指定されたパスワードがデバイスパスワードとして使用されます。SSH公開キーベースの認証が使用されており、SSHプライベートキーのパスフレーズが空の場合、パスワードは必要ありません。ただし、空のパスフレーズを含むSSHプライベートキーは推奨されません。パスワードベースの認証またはパスワードで保護されたSSHキーのパスワードを取得するには、プレイブックまたはコマンドラインからパスワードの入力を求めるか、パスワードを安全に保存するためのボールトで暗号化されたデータファイルを作成します。

ジュニパーネットワークスモジュールの接続および認証パラメーターは、以下の方法で指定できます。値を明示的に定義しない場合、 ジュニパーネットワークスモジュールのデフォルト値についての説明に従って、デフォルト値が使用される場合があります。パラメーターの値を複数の場所で定義する場合、Ansibleは、公式のAnsibleドキュメントの 「変数の優先順位について 」で説明されているように、変数の優先順位に基づいて値を選択します。

  • Ansible変数:接続および認証パラメータ値は、通常のAnsible変数(インベントリまたはボールトファイル、ホスト変数またはグループ変数で定義された変数など)を使用するか、コマンドラインオプションを使用して指定できます。

  • SSHクライアント設定ファイル—SSH接続の場合、別の設定ファイルを指定するオプションを定義しssh_configていない限り、ジュニパーネットワークスモジュールは、デフォルトのSSH設定ファイル(存在する場合)を自動的にクエリします。モジュールは、設定をオーバーライドする変数を明示的に定義しない限り、指定された接続のSSH構成ファイル内の関連する設定を使用します。

  • モジュール引数 - および Juniper.junos モジュールは、juniper.deviceローカル接続(connection: local)の接続および認証関連のオプションを最上位モジュール引数として指定できます。さらに、モジュールでは、 Juniper.junos モジュールでプロバイダー パラメーターを定義する方法で説明されているように、Juniper.junosモジュール引数でのプロバイダー ディクショナリの使用がサポートされています。

  • vars:section—モジュールはjuniper.device、ローカルおよび持続接続のvars:セクションで認証パラメーターを定義する方法セクションで説明されている、プレイのvars:セクションでのローカルおよび持続接続の接続および認証関連のオプションの指定をサポートします。

このドキュメントでは、ジュニパーネットワークスモジュールを使用してJunosデバイスを管理する際の認証のさまざまな側面について説明します。

ジュニパーネットワークスモジュールのデフォルト値について

Junosデバイスを管理するモジュールの接続および認証パラメーターを明示的に定義できます。パラメーターを定義しない場合、モジュールは場合によってはデフォルト値を使用します。 表 1 は、コレクションおよびロール内の juniper.device モジュールの共通接続パラメーターのデフォルト値と変数の優先順位の概要を示しています Juniper.junos 。個々のモジュールで受け入れられる引数の詳細については、そのモジュールの API リファレンス ドキュメントを参照してください。

表 1: 接続パラメータのデフォルト値と変数の優先順位

パラメーター名

パラメーター エイリアス

形容

デフォルト値と変数の優先順位

host

hostname

ip

接続を確立するリモート デバイスのホスト名または IP アドレス。

{{ inventory_hostname }}

passwd

password

管理対象デバイスでの認証に使用されるユーザーのパスワードまたはSSHキーのパスフレーズ。

  1. ANSIBLE_NET_PASSWORD 環境変数

  2. または--ask-passコマンド ライン オプションに-k指定された値

ssh_config

SSH クライアント構成ファイルへのパス。

このパラメーターを省略すると、モジュールはデフォルトの場所にある SSH 構成ファイルを使用します (存在する場合)。

~/.ssh/config

ssh_private_key_file

ssh_keyfile

リモートデバイスでの認証に使用されるSSHプライベートキーファイルへのパス。

パスを明示的に指定せず、デフォルト値が見つからない場合、モジュールはユーザーのSSH構成で指定されたSSH秘密鍵ファイルまたはオペレーティングシステム固有のデフォルトを使用します。

  1. ANSIBLE_NET_SSH_KEYFILE 環境変数

  2. または--key-fileコマンド ライン オプションに--private-key指定された値

  3. 何一つ

user

username

マネージドノードでの認証に使用されるユーザー名。

  1. ANSIBLE_NET_USERNAME 環境変数

  2. remote_user Ansibleによって定義されたとおり

  3. USER 環境変数

ジュニパーネットワークスのモジュールを実行する場合、接続には必ずこの引数が必要です host 。ただし、ホストのデフォルト {{ inventory_hostname }}は であるため、明示的に指定する必要はありません。

管理対象のJunosデバイスにアクセスできるユーザーアカウントを使用して、ジュニパーネットワークスモジュールを実行できます。モジュールを実行すると、Junos OSユーザーアカウントのアクセス権限が適用され、Junos OSユーザーアカウントに設定されたクラスによって権限が決まります。ユーザーを指定しない場合、ユーザーは表 1 で説明されているuserアルゴリズムに従って設定されます。の定義remote_userに使用される優先順位については、Ansibleのドキュメントを参照してください。これは、次のようなさまざまな方法で定義できます。

  • -u または --user コマンドラインオプション

  • ANSIBLE_REMOTE_USER 環境変数

  • remote_user 構成設定

varsで認証パラメータを定義する方法:ローカルおよび永続的な接続のセクション

モジュールの接続パラメーターと認証パラメーター juniper.device は、他の変数 (SSH 構成ファイル、Ansible インベントリ ファイル、コマンド ライン引数、モジュール引数など) で通常行うように定義する以外に、プレイの vars: セクションで定義できます。このセクションでは vars: 、プレイ内のすべてのモジュールがホストに接続するために使用できる単一の場所で共通の接続パラメータを定義できます。さらに、特定のAnsible接続では、ここで説明するように、プレイ内でパラメーターを定義するときにセクション vars: を使用する必要があります。

モジュールは juniper.device 、次のAnsible接続タイプをサポートしています。

  • を使用して定義されるローカル接続 connection: local

  • 持続接続 (以下を使用して定義されます) connection: juniper.device.pyez

ローカル接続と持続接続の両方で、Ansibleは制御ノード上でモジュールをローカルに実行します。を使用すると connection: local、Ansibleは、接続を必要とするプレイ内のタスクごとに、ホストへの個別の接続を確立します。対照的に、 を使用すると、 connection: juniper.device.pyezAnsibleはホストへの単一の永続的な接続を確立し、プレイ内のすべてのタスクの実行にわたって持続します。

永続的な接続には、ローカル接続の場合と同じ接続および認証パラメーターを使用します。 ジュニパーネットワークスモジュールのデフォルト値について で説明されているデフォルトのパラメーター値は、両方のタイプの接続に適用されます。ただし、持続的接続のプレイ内で接続および認証パラメーターを定義する場合は、接続が 1 つしかないため、各タスクの最上位モジュール引数としてパラメーターを定義するのではなく、セクション内の vars: パラメーターを定義する必要があり、パラメーターはそのプレイ内のすべてのタスクに適用する必要があります。ローカル接続の場合、パラメーターは vars: セクションで定義することも、モジュールの引数として定義することもできます。両方の場所でパラメーターを定義すると、モジュールの引数が優先されます。

次のプレイブックは、インベントリグループ内の各ホストで2つの juniper.device モジュールを実行します。プレイでは、Ansible接続 juniper.device.pyezを と定義し、プレイ内のすべてのタスクの実行にわたって持続する各ホストへの接続を確立します。永続的な接続の認証パラメーターは、プレイの vars: セクション内で定義されます。 user および passwd 値は、 vault-vars.yaml ボルト ファイルで定義された変数を参照します。

Juniper.junosモジュールでプロバイダパラメータを定義する方法

リリース 2.0.0 以降Juniper.junos、モジュールは、provider接続および認証関連のパラメータごとに個別の最上位モジュール引数をサポートするだけでなく、Juniper.junosこのパラメータもサポートします。このパラメーターを使用するとprovider、複数のモジュールの接続パラメーターと認証パラメーターを 1 か所で定義し、それらの値を使用するモジュールに簡単に渡すことができます。さらに、後でパラメーターを更新する必要がある場合は、1 つの場所で更新するだけで済みます。

手記:

juniper.deviceコレクション モジュールは、このパラメーターproviderの使用をサポートしていません。

引数はprovider、デバイスへの接続と認証に必要な接続の詳細を含むディクショナリを受け入れます。引数はhost接続には常に必要ですが、モジュールが のhostデフォルト値を使用する場合は、値を明示的に指定する必要はありません。ディクショナリでは、必要に応じて、 userpasswdssh_private_key_file、 など、接続に必要な追加のパラメーターを定義できます。個々のモジュールで受け入れられる引数の詳細については、そのモジュールの API リファレンス ドキュメントを参照してください。

次の例では、変数はcredentials、 、 user、および passwd パラメーターを定義するhostディクショナリです。

次のサンプル プレイブックでは、個々のモジュール引数を定義する代わりに、単一の provider 引数を使用して接続の詳細をモジュールに juniper_junos_facts 渡します。モジュールを使用する Juniper.junos タスクを追加すると、モジュールごとに同じディクショナリを参照できます。

SSH キーを使用してユーザーを認証する方法

ジュニパーネットワークス juniper.device とモジュールでは、 Juniper.junos SSHキーを使用してJunosデバイスまたはデバイスに接続されているコンソールサーバーに接続できます。SSHキーを使用してユーザーを認証するには、まずAnsible制御ノードでキーを生成してから、モジュールが接続するデバイス(管理対象JunosデバイスまたはJunosデバイスに接続されたコンソールサーバー)でキーを設定します。

SSH キーを生成および設定する

Ansible制御ノードでSSHキーを生成し、リモートデバイスで公開キーを設定するには、次の手順に従います。

  1. Ansible制御ノードで、目的のユーザーの公開および秘密SSHキーペアを生成し、次に示すような必要なオプションを指定します。
  2. (オプション)ネイティブSSHキーエージェントにキーをロードします。例えば:
  3. モジュールが接続する各デバイスに公開キーを設定します。これには、JunosデバイスまたはJunosデバイスに接続されたコンソール・サーバーが含まれます。

    Junosデバイスで公開鍵を構成する最も簡単な方法は、適切なユーザーアカウントで公開鍵を含むファイルを読み込むことです。

  4. キーを使用してデバイスにログインし、キーが機能することを確認します。

AnsibleプレイブックでのSSHキーの使用

SSH キーペアを生成し、リモート デバイスで公開キーを構成したら、キーを使用してデバイスに接続できます。ジュニパーネットワークスは、別の設定ファイルを指定するオプションを定義しssh_configていない限り、~/.ssh/configにあるデフォルトのSSH設定ファイルに対して、それが存在する場合は自動的にクエリーを実行します。モジュールは、設定をオーバーライドする変数を明示的に定義しない限り、指定された接続のSSH構成ファイル内の関連する設定を使用します。さらに、モジュールは、デフォルトの場所にある鍵と、SSH 鍵エージェントにアクティブにロードされている鍵を自動的に探します。

SSH キーの特定の設定を定義するには、Ansible プレイブックに適切な引数を含めることができます。引数は、モジュールとAnsible接続のセットに適した場所(たとえば、永続的な接続でモジュールを使用するjuniper.deviceプレイのセクション)vars:で定義します。含める引数は、鍵の場所、鍵が SSH 鍵エージェントにアクティブにロードされているかどうか、鍵がパスワードで保護されているかどうか、およびユーザーの SSH 構成ファイルでそのホストの設定が既に定義されているかどうかによって決まります。

  • ネイティブのSSHキーエージェントにアクティブにロードされているSSHキー、またはデフォルトの場所にあるパスワード保護されていないSSHキーを使用してJunosデバイスに接続する場合、デフォルトと異なる場合を除き、接続または認証関連の引数を定義する必要はありません。

  • デフォルトの場所になく、パスワードで保護されていないSSHキーを使用してJunosデバイスに接続するには、 引数を ssh_private_key_file SSHプライベートキーファイルのパスに設定します。例えば:

    または、SSH 構成ファイルで定義して、SSH 秘密キーのパスを指定することもできます。環境変数を設定する ANSIBLE_NET_SSH_KEYFILE か、 --private-key プレイブックの実行時に OR --key-file コマンド ライン オプションを定義します。

  • 推奨される方法であるパスワードで保護されたSSHキーファイルを使用してJunosデバイスに接続するには、引数で passwd SSHキーファイルのパスフレーズを参照するか、通常のAnsible変数またはコマンドラインオプションを使用してパスワードを指定します。

    環境に適した安全な方法でSSHキーファイルのパスフレーズを取得するのは、ユーザーの責任です。ベスト プラクティスは、プレイブックを呼び出すたびにプロンプトを表示するか、暗号化されていない形式で資格情報を格納するのではなく、暗号化されたコンテナーを使用して変数を格納することをお勧めします。たとえば、次に示すように、コマンドライン オプションを使用して --ask-pass プレイブックを実行し、プロンプトが表示されたら SSH キー ファイルのパスフレーズを指定できます。

    SSH キーのパスフレーズにプロンプトまたは暗号化されたボールトファイルを使用する方法の詳細については、「 プレイブックまたはコマンドラインパスワードプロンプトを使用してユーザーを認証する方法 」および「 Ansible Vaultで暗号化されたファイルを使用してユーザーを認証する方法」を参照してください。

SSH キーを使用してコンソール サーバーに接続する方法については、「 コンソール サーバー経由で認証する方法」を参照してください。

プレイブックまたはコマンドラインパスワードプロンプトを使用してユーザーを認証する方法

Ansibleモジュールを実行しているユーザーを認証するには、プレイブックの実行時にユーザーの資格情報の入力を求めます。たとえば、プレイブックで対話型プロンプトを定義したり、または--ask-passコマンド ライン オプションを使用して-kプレイブックを実行してパスワードの入力を求めることができます。SSHキーが使用されている場合、提供されたパスワードがプライベートSSHキーのロックを解除するためのパスフレーズとして使用されます。パスワードベースの認証を使用する場合、指定されたパスワードがデバイスパスワードとして使用されます。

プレイブックで対話型プロンプトを定義して、ユーザーのパスワードまたは SSH キーのパスフレーズを取得するには:

  1. ユーザーのパスワードまたはSSHキーのパスフレーズ(およびオプションでユーザー名)の入力を求め、値を変数に格納するコードをvars_prompt:下に含めます。
  2. passwduserパラメーターを設定して、それぞれがそれぞれの変数を参照するようにします。
  3. ユーザー名とパスワードの入力を求め、変数private: yesが に設定されているため、コマンドラインでパスワードをエコーしないプレイブックを実行します。

または、または--ask-passコマンドラインオプションを使用して-kプレイブックを実行し、パスワードまたはパスフレーズの入力を求めることもできます。既定のユーザー名を使用する次のプレイブックについて考えてみます。

プレイブックを実行し、パスワードの入力を求め、コマンドラインでパスワードをエコーしないコマンドラインオプションまたはコマンドラインオプションを含め-k--ask-passます。

Ansibleボールトで暗号化されたファイルを使用してユーザーを認証する方法

Ansibleボールトを作成して、保存したパスワードやその他の機密性の高い接続および認証値をボールトで暗号化されたデータファイルに安全に保存できます。その後、プレイブックは、一連のモジュールと Ansible 接続の種類に適した場所 (プレイの vars: セクションやモジュール引数など) でこれらの変数を参照できます。

パスワードを含む必須変数を含むAnsibleボールトファイルを作成して使用するには:

  1. Vault で暗号化されたデータ ファイルを作成し、データ ファイルの暗号化、復号化、編集、および使用に必要なパスワードを指定します。
  2. ファイル内の必要な変数を定義して保存します。
  3. ファイルが暗号化されていることを確認します。
  4. プレイブックで、コンテナーで暗号化された変数ファイルを含め、モジュールと Ansible 接続の種類に適した場所で必要な変数を参照します。
    手記:

    代わりに、コンテナーで実際の user 変数と passwd 変数を定義すると、モジュールによって自動的に取得されるため、プレイブックで明示的に定義する必要はありません。

  5. オプションを使用して--ask-vault-passプレイブックを実行すると、ボールトパスワードの入力を求められます。

コンソール サーバー経由で認証する方法

ジュニパーネットワークスのAnsibleモジュールは、コンソールサーバーを介してJunosデバイスに接続できます。コンソール サーバーを経由したSSH接続の場合、コンソール サーバーとJunosデバイスの両方の認証資格情報を指定する必要があります。コンソール・サーバー認証には、デバイス・パスワードまたはパスワードで保護されたSSHキー・ファイルのいずれかを指定できます。

コンソール サーバー経由で Junos デバイスに接続するには、デフォルト値がない場合、またはデフォルト値が適切でない場合は、プレイブックに次のパラメーターを指定する必要があります。

  • host- コンソール サーバのホスト名または IP アドレス

  • user および passwd- Junos OS ログイン資格情報

  • cs_user- コンソール サーバのユーザー名

  • cs_passwd- コンソール・サーバーでの認証に必要なデバイス・パスワードまたはSSHキー・ファイルのパスフレーズ

次の例では、Junos OSユーザーとコンソール・サーバー・ユーザーの認証情報がAnsibleボールト・ファイルで定義されています。その後、コンテナー変数はプレイブックで参照されます。この場合、引数は cs_passwd 、引数で指定された ssh_private_key_file SSHキーのパスフレーズです。