サービスの改善にご協力お願いします。

お客様のご意見をお聞かせください。

アンケートの所要時間はおよそ 2 分です。

close
keyboard_arrow_left
Junos OS向けAnsible開発者ガイド
Table of Contents Expand all
list Table of Contents

この機械翻訳はお役に立ちましたでしょうか?

starstarstarstarstar
Go to English page
免責事項:

このページは、サードパーティー製機械翻訳ソフトウェアを使用して翻訳されます。質の高い翻訳を提供するために合理的な対応はされていますが、ジュニパーネットワークスがその正確性を保証することはできかねます。この翻訳に含まれる情報の正確性について疑問が生じた場合は、英語版を参照してください. ダウンロード可能なPDF (英語版のみ).

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

date_range 14-Nov-24

認証の概要

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

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

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

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

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

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

  • SSHクライアント構成ファイル—SSH接続の場合、ジュニパーネットワークスのモジュールは、 ~/.ssh/configにあるデフォルトのSSH構成ファイルがあれば、それに対して自動的にクエリーを実行します。また、 ssh_config オプションを含めて、別の構成ファイルを指定することもできます。モジュールは、設定を上書きする変数を明示的に定義しない限り、特定の接続の SSH 構成ファイル内の関連する設定を使用します。

  • モジュール引数— juniper.device モジュールでは、ローカル接続(connection: local)の接続および認証関連のオプションを最上位のモジュール引数として指定することをサポートしています。

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

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

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

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

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

パラメーター名

パラメーターのエイリアス

形容

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

host

hostname

ip

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

{{ inventory_hostname }}

passwd

password

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

  1. ANSIBLE_NET_PASSWORD 環境変数

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

ssh_config

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

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

~/.ssh/config

ssh_private_key_file

ssh_keyfile

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

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

  1. ANSIBLE_NET_SSH_KEYFILE 環境変数

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

  3. 何一つ

user

username

管理対象ノードでの認証に使用されるユーザー名。

  1. ANSIBLE_NET_USERNAME 環境変数

  2. remote_user Ansibleの定義による

  3. USER 環境変数

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

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

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

  • ANSIBLE_REMOTE_USER 環境変数

  • remote_user 構成設定

ローカル接続と持続接続の vars: セクションで認証パラメーターを定義する方法

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

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

  • ローカル接続は、 connection: local

  • 永続的な接続は、 connection: juniper.device.pyez

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

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

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

content_copy zoom_out_map
---
- name: Get Device Facts
  hosts: dc1
  connection: juniper.device.pyez
  gather_facts: no

  vars:
    user: "{{ admin_username }}"
    passwd: "{{ admin_password }}"

  vars_files:
    - vault-vars.yaml

  tasks:
    - name: Retrieve facts from Junos devices
      juniper.device.facts:
        savedir: "{{ playbook_dir }}"

    - name: Get hardware inventory
      juniper.device.command:
        commands: "show chassis hardware"
        dest_dir: "{{ playbook_dir }}"

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

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

SSH キーを生成して構成する

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

  1. Ansible制御ノードで、目的のユーザーの公開および秘密SSHキーペアを生成し、必要なオプションを指定します。次に例を示します。
    content_copy zoom_out_map
    user@localhost:~$ cd ~/.ssh
    user@localhost:~/.ssh$ ssh-keygen -t rsa -b 4096
    Enter file in which to save the key (/home/user/.ssh/id_rsa): id_rsa_dc 
    Enter passphrase (empty for no passphrase):  *****
    Enter same passphrase again: *****
    
  2. (オプション)ネイティブSSHキーエージェントにキーをロードします。例えば:
    content_copy zoom_out_map
    user@localhost:~/.ssh$ ssh-add ~/.ssh/id_rsa_dc
    
  3. モジュールの接続先となる各デバイス(Junosデバイス、Junosデバイスに接続されたコンソール・サーバーなど)で公開鍵を構成します。

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

    content_copy zoom_out_map
    [edit]
    user@router# set system login user username authentication load-key-file URL 
    user@router# commit
    
  4. キーを使用してデバイスにログインし、キーが機能することを確認します。
    content_copy zoom_out_map
    user@localhost:~$ ssh -i ~/.ssh/id_rsa_dc router.example.com 
    Enter passphrase for key '/home/user/.ssh/id_rsa_dc': 
    user@router>
    

Ansible Playbook での SSH キーの使用

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

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

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

    content_copy zoom_out_map
        juniper.device.facts:  
          savedir: "{{ playbook_dir }}"
  • デフォルトの場所になく、パスワードで保護されていない SSH キーを使用して Junos デバイスに接続するには、 ssh_private_key_file 引数に SSH 秘密キー ファイルのパスを設定します。例えば:

    content_copy zoom_out_map
      vars:
        ssh_private_key_file: "/home/user/.ssh/id_rsa_alternate"
    
      tasks:
        - name: Retrieve facts from Junos devices
          juniper.device.facts:
            savedir: "{{ playbook_dir }}"

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

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

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

    content_copy zoom_out_map
      vars:
        ssh_private_key_file: "/home/user/.ssh/id_rsa_dc"
    
      tasks:
        - name: Retrieve facts from Junos devices
          juniper.device.facts:
            savedir: "{{ playbook_dir }}"
    content_copy zoom_out_map
    user@localhost:~$ ansible-playbook playbook.yaml --ask-pass
    SSH password: 
    

    SSH キーのパスフレーズにプロンプトまたは暗号化された Vault ファイルを使用する方法の詳細は、 How to Authenticate the User Using a Playbook or Command-Line Password Prompt および How to authenticate the user using an Ansible vault-encrypted fileを参照してください。

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

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

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

ユーザーのパスワードまたは SSH キーのパスフレーズを取得するための対話型プロンプトを Playbook で定義するには、以下を行います。

  1. ユーザーのパスワードまたは SSH キーのパスフレーズ(およびオプションでユーザー名)の入力を求め、値を変数に格納するコードを vars_prompt: の下に含めます。
    content_copy zoom_out_map
    ---
    - name: Get Device Facts
      hosts: all
      connection: local
      gather_facts: no
    
      vars_prompt:
        - name: "USERNAME"
          prompt: "Username"
          private: no
        - name: "DEVICE_PASSWORD"
          prompt: "Device password"
          private: yes
    
  2. user パラメーターと passwd パラメーターを設定して、それぞれがそれぞれの変数を参照するようにします。
    content_copy zoom_out_map
      vars:
        user: "{{ USERNAME }}"
        passwd: "{{ DEVICE_PASSWORD }}"
    
  3. 実行するタスクを含めます。
    content_copy zoom_out_map
      tasks: 
        - name: Retrieve facts from Junos devices
          juniper.device.facts:  
            savedir: "{{ playbook_dir }}"
        - name: Print facts
          ansible.builtin.debug:
            var: junos.version
    
  4. Playbook を実行すると、ユーザー名とパスワードの入力が求められ、変数が private: yes に設定されているため、コマンドラインにパスワードがエコーされません。
    content_copy zoom_out_map
    user@localhost:~$ ansible-playbook playbook.yaml
    User name: user
    Device password: 
    

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

content_copy zoom_out_map
---
- name: Get Device Facts
  hosts: all
  connection: local
  gather_facts: no

  tasks: 
    - name: Retrieve facts from Junos devices
      juniper.device.facts:  
        savedir: "{{ playbook_dir }}"
    - name: Print facts
      ansible.builtin.debug:
        var: junos.version

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

content_copy zoom_out_map
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass
SSH password: 

PLAY [Get Device Facts] ***********************************************
...

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

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

パスワードなど、必要な変数を含む Ansible Vault ファイルを作成して使用するには、次の手順を実行します。

  1. Vault で暗号化されたデータ ファイルを作成し、データ ファイルの暗号化、復号化、編集、および使用に必要なパスワードを指定します。
    content_copy zoom_out_map
    root@localhost:~# ansible-vault create vault-vars.yaml
    Vault password:  
    Confirm Vault password: 
    
  2. 必要な変数をファイルで定義し、保存します。
    content_copy zoom_out_map
    root@localhost:~# ansible-vault edit vault-vars.yaml
    Vault password: 
    
    # Vault variables
    root_username: root
    root_password: password
  3. ファイルが暗号化されていることを確認します。
    content_copy zoom_out_map
    root@localhost:~# cat vault-vars.yaml 
    $ANSIBLE_VAULT;1.1;AES256
    31415961343966623035373532313264333633663764353763393066643131306565636463326634
    3730326165666565356665343137313161234569336336640a653939633331663935376362376666
    65653737653262363235353261626135312345663665396262376339623737366238653436306663
    6430376633306339360a343065363331313532633036343866376330623634653538353132314159
    3835
    
  4. プレイブックに、コンテナーで暗号化された変数ファイルを含め、モジュールと Ansible 接続タイプに適した場所で必要な変数を参照します。
    content_copy zoom_out_map
    ---
    - name: Get Device Facts 
      hosts: dc1
      connection: local
      gather_facts: no
    
      vars_files:
        - vault-vars.yaml
    
      vars:
        user: "{{ root_username }}"
        passwd: "{{ root_password }}"
    
      tasks:
        - name: Retrieve facts from Junos devices 
          juniper.device.facts:  
            savedir: "{{ playbook_dir }}"
        - name: Print version
          ansible.builtin.debug:
            var: junos.version
    手記:

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

  5. --ask-vault-passオプションを使用して Playbook を実行すると、ボールトパスワードの入力が求められます。
    content_copy zoom_out_map
    root@localhost:~# ansible-playbook playbook-name.yaml --ask-vault-pass
    Vault password: 
    
    PLAY [Get Device Facts] ***********************************************
    ...
     

コンソール サーバーを介して認証する方法

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

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

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

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

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

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

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

content_copy zoom_out_map
---
- name: Get Device Facts
  hosts: dc1_con
  connection: local
  gather_facts: no

  vars_files:
    - vault-vars.yaml

  vars:
    host: "{{ inventory_hostname }}"
    user: "{{ junos_username }}"
    passwd: "{{ junos_password }}"
    cs_user: "{{ cs_username }}"
    cs_passwd: "{{ cs_key_password }}"
    ssh_private_key_file: "/home/user/.ssh/id_rsa_dc"

  tasks:
    - name: Retrieve facts from Junos devices
      juniper.device.facts:  
        savedir: "{{ playbook_dir }}"
external-footer-nav