Ansible を使用した Junos デバイスへの接続
概要 ジュニパーネットワークスのAnsibleモジュールを使用すると、SSH、Telnet、またはシリアルコンソール接続を使用してJunosデバイスに接続できます。
ジュニパーネットワークスは、Junosデバイスの管理に使用できるAnsibleモジュールを提供しています。ジュニパーネットワークスのモジュールは、Ansible GalaxyでホストされているコレクションとJuniper.junos
ロールを通じてjuniper.device
配布されます。モジュールは、このドキュメントで説明されているさまざまなプロトコルとAnsible接続を使用して、Junosデバイスに接続できます。
接続方法の概要
ジュニパーネットワークスのAnsibleモジュールを使用すると、SSH、Telnet、またはシリアルコンソール接続を使用してJunosデバイスに接続できます。端末またはラップトップがJunosデバイスのコンソールポートに物理的に接続されている場合は、シリアル コンソール 接続を使用する必要があります。SSHまたはTelnetを使用して、デバイスの管理インターフェイス、またはデバイスのコンソール ポートに直接接続されている コンソール サーバーに接続できます。
工場出荷時のデフォルト設定の新規またはゼロ化されたデバイスは、コンソール接続を介してアクセスする必要があります。このように、Ansibleを使用して、デバイスに直接接続している場合はシリアルコンソール接続を使用するか、デバイスに直接接続されているコンソールサーバーを介してtelnetまたはSSHを使用して、リモートアクセス用にまだ構成されていません。
デフォルトでは、ジュニパーネットワークスモジュールはSSHを使用してデバイスに接続します。Telnet またはシリアル コンソール接続を使用するには、モジュールのパラメーターをmode
適切な値に設定します。デバイスにtelnetで接続するには、引数を mode
に設定します"telnet"
。シリアル・コンソール接続を使用するには、引数"serial"
を mode
に設定します。表1は、接続モード、特定のパラメーターのデフォルト値、必要なJunos OS設定、およびそのJuniper.junos
接続モードのサポートが最初に導入されたリリースをまとめたものです。モジュールは、juniper.device
初期リリース時点ですべての接続モードをサポートしています。
接続モード |
引数の値 |
デフォルトポート |
必要な Junos OS 設定 |
最初にサポートされたリリース ( |
---|---|---|---|---|
SSH経由のNETCONF(デフォルト) |
– |
830 |
[edit system services] netconf { ssh; } |
1.0.0 |
シリアルコンソール接続 |
|
/dev/ttyUSB0 |
– |
2.0.0 |
コンソール サーバー経由の SSH |
– |
22 |
– |
2.2.0 |
JunosデバイスへのTelnet |
|
23 |
[edit system services] telnet; |
1.4.0 2.0.0で追加されたデフォルトポート |
コンソール・サーバーを介した Telnet |
|
23 |
– |
1.4.0 |
SSH経由でTelnetまたはNETCONFを使用して管理インターフェイスにアクセスするには、まず階層 [edit system services]
レベルで適切なサービスを有効にする必要があります。Telnet はクリア テキスト パスワードを使用するため (したがって、潜在的なセキュリティの脆弱性を生み出す)、SSH の使用を推奨します。
ジュニパーネットワークスモジュールを実行してJunosデバイスを管理する場合、リモートデバイスは、特定のプロトコルに適した資格情報を使用してAnsibleユーザーを認証できる必要があります。詳細については、次を参照してください: JunosデバイスでAnsibleモジュールを実行しているユーザーの認証。
ジュニパーネットワークス モジュールは、Junos デバイスに接続するときに、ローカル(タスク単位)接続や永続的(プレイ単位)接続など、さまざまな Ansible 接続をサポートします。Ansible接続は、Ansibleがプレイ内のタスクごとにホストへの個別の接続を確立するか、プレイ内のすべてのタスクにわたって保持するホストへの単一の接続を確立するかを決定します。Ansible接続の指定については、 ローカルおよび永続的なAnsible接続についてを参照してください。
ローカルおよび永続的なAnsible接続について
ジュニパーネットワークスモジュールは、Junos PyEZとJunos XML APIをNETCONF上で使用してデバイスとインターフェイスするため、Junosデバイス上でPythonは必要ありません。したがって、Junosデバイスで操作を実行するには、PythonがインストールされているAnsible制御ノードでモジュールをローカルで実行する必要があります。プレイブックの再生に含めることで connection: local
、モジュールをローカルで実行できます。を使用すると connection: local
、Ansibleは、ホストで操作を実行するプレイ内のタスクごとに、ホストへの個別の接続を確立します。
juniper.device
収集モジュールは、ホストへの永続的な接続を確立することもサポートconnection: juniper.device.pyez
しています。永続的な接続を使用する場合、Ansibleは引き続き制御ノードでモジュールをローカルに実行しますが、各ホストへの単一の接続を確立および維持するだけで、プレイ内のすべてのタスクの実行にわたって保持されます。ホストへの永続的な接続を確立する方が、プレイ中のタスクごとにホストに個別の接続を確立するよりも、複数のタスクを実行するのに効率的です。
表 2 は、Ansible 接続とそれをサポートするコンテンツ セットをまとめたものです。
Ansible接続 |
説明 |
コンテンツ セットのサポート |
---|---|---|
|
Ansible制御ノードでモジュールをローカルに実行しますが、ホストで操作を実行するプレイ内のタスクごとに、ホストへの個別の接続を確立します。 |
|
|
Ansibleコントロールノードでモジュールをローカルに実行しますが、プレイ内のすべてのタスクの実行に対して持続するホストへの永続的な接続を確立します。 |
|
Ansibleは非推奨になりました connection: local
。したがって、コレクション モジュールを使用する場合は juniper.device
、Ansible が今後のリリースでローカル接続のサポートを削除する場合の問題を回避するために、プレイブックで使用する connection: juniper.device.pyez
ことをお勧めします。
を使用すると connection: local
、Ansible はモジュールごとにホストへの個別の接続を確立するため、モジュールの引数リストでモジュール固有の接続および認証パラメーターを定義できます。対照的に、 を使用すると connection: juniper.device.pyez
、プレイ内のすべてのタスクで接続が維持されるため、すべてのモジュールに対して接続と認証のパラメーターをグローバルに定義する必要があります。パラメーター vars:
は、プレイのセクションで定義するだけでなく、SSH 構成ファイルや Ansible インベントリ ファイルなどの他の方法でパラメーターを指定できます。詳細については、 JunosデバイスでAnsibleモジュールを実行しているユーザーの認証を参照してください。
次のプレイブックは、プレイ内のすべてのタスクに使用される各ホストへの永続的な接続を確立します。Ansibleボールトファイルに保存されているユーザーの資格情報は、プレイの vars:
セクションで定義されます。
--- - name: Get Device Information 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 を使用したデバイスへの接続
ジュニパーネットワークスのAnsibleモジュールは、SSHを使用したJunosデバイスへの接続をサポートしています。デバイスの管理インターフェイスでSSH経由でNETCONFセッションを確立するか、デバイスのコンソールポートに直接接続されている コンソール サーバーとSSH接続を確立できます。SSHサーバーは、 JunosデバイスでAnsibleモジュールを実行しているユーザーの認証で説明されているように、標準のSSH認証メカニズムを使用してユーザーを認証できる必要があります。SSH経由でNETCONFセッションを確立するには、 Junos OSマネージドノード向けにAnsibleをセットアップするで説明されている要件も満たす必要があります。
ジュニパーネットワークスモジュールは、~/.ssh/configにあるデフォルトのSSH設定ファイルがあれば、それに対して自動的にクエリーを実行します(パラメータで ssh_config
別の設定ファイルが指定されていない限り)。SSHを使用してJunosデバイスまたはデバイスに接続されたコンソールサーバーに接続する場合、モジュールはまずSSH公開キーベースの認証を試み、次にパスワードベースの認証を試みます。パスワードベースの認証を使用する場合、指定されたパスワードがデバイスパスワードとして使用されます。SSHキーが使用されている場合、提供されたパスワードが秘密キーのロックを解除するためのパスフレーズとして使用されます。SSH 秘密キーのパスフレーズが空の場合、パスワードは必要ありません。ただし、空のパスフレーズを含むSSHプライベートキーは推奨されません。
次のプレイブックは、JunosデバイスとSSH経由でNETCONFセッションを確立し、デバイスのファクトを取得します。プレイブックでは、既定の場所で SSH キーが使用されます。
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version debug: var: junos.version
ジュニパーネットワークスのAnsibleモジュールでは、コンソール・サーバーへのSSH接続を介してJunosデバイスに接続することもできます。この場合、Junosデバイスとコンソール・サーバーの両方のログイン資格情報を指定する必要があります。user
および passwd
パラメーターを使用してJunos OSのログイン資格情報を指定し、 および cs_passwd
パラメーターを使用してcs_user
コンソール サーバーの資格情報を指定します。SSH キーが使用されている場合、cs_passwd
はプライベート キーのパスフレーズです。
以下のプレイブックでは、コンソール サーバーと Junos デバイスに対するユーザーの資格情報の入力を求めます。モジュールはコンソール サーバーで認証され、次に Junos デバイスで認証されます。認証が成功すると、プレイブックは管理対象ノードからデバイスのファクトを取得し、Junos OSのバージョンを出力します。
--- - name: Get Device Facts hosts: dc1_con connection: local gather_facts: no vars_prompt: - name: "CS_USER" prompt: "Console server username" private: no - name: "CS_PASSWORD" prompt: "Console server password" private: yes - name: "JUNOS_USER" prompt: "Junos OS username" private: no - name: "JUNOS_PASSWORD" prompt: "Junos OS password" private: yes vars: cs_user: "{{ CS_USER }}" cs_passwd: "{{ CS_PASSWORD }}" user: "{{ JUNOS_USER }}" passwd: "{{ JUNOS_PASSWORD }}" tasks: - name: "Retrieve facts from Junos devices" juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version debug: var: junos.version
ジュニパーネットワークスモジュールは、デフォルトのSSHクライアント設定ファイル~/ .ssh/configがあれば、自動的にクエリーを実行します。別のSSH構成ファイルを使用するには、 パラメーターを含め ssh_config
、構成ファイルの場所を指定します。例えば:
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no vars: ssh_config: "/home/admin/.ssh/config_dc" tasks: - name: "Retrieve facts from Junos devices" juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version debug: var: junos.version
Telnet を使用したデバイスへの接続
ジュニパーネットワークスのモジュールでは、ネットワーク デバイスへの暗号化されていないアクセスを提供する telnet を使用して Junos デバイスに接続できます。デバイスの管理インターフェイス、またはデバイスのコンソール ポートに直接接続されている コンソール サーバーに Telnet で接続できます。コンソール・サーバーを介してデバイスにアクセスすると、リモート・アクセス用にまだ構成されていない新規デバイスまたはゼロ化されたデバイスを最初に構成できます。管理インターフェイスに telnet 接続するには、インターフェイスへのアクセスを必要とするすべてのデバイスの 階層レベルで Telnet サービス [edit system services]
を設定する必要があります。
リモート デバイスに telnet で接続するには、パラメータを mode
に設定し、オプションでポートを指定するパラメータ"telnet"
を含めport
ます。mode
を に設定"telnet"
し、パラメーターを省略した場合port
、 の値はport
デフォルトで 23 になります。永続的な接続の場合は、 セクションの下に vars:
と port
を定義しますmode
。ローカル接続の場合、パラメーターは セクションの下vars:
またはモジュール引数として定義できます。
次のプレイブックは、ポート 7016 を使用して Junos デバイスに telnet 接続し、デバイスのファクトを取得して、ファイルに保存します。モジュールはデフォルトのユーザーを使用し、ログインパスワードの入力を求めます。
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "DEVICE_PASSWORD" prompt: "Device password" private: yes vars: passwd: "{{ DEVICE_PASSWORD }}" mode: "telnet" port: "7016" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version debug: var: junos.version
シリアルコンソール接続を使用したデバイスとの接続
ジュニパーネットワークスのモジュールでは、シリアルコンソール接続を使ってJunosデバイスに接続できます。これは、リモートアクセス用にまだ設定されていない新規デバイスやゼロ化されたデバイスを最初に設定する必要がある場合に便利です。この接続方法を使用するには、端末またはラップトップが CONSOLE ポートを介してJunosデバイスに物理的に接続されている必要があります。Junosデバイスの コンソール ポートへの接続に関する詳細な手順については、特定のデバイスのハードウェアマニュアルを参照してください。
シリアル コンソール接続を介して Junos デバイスに接続するには、モジュールのパラメータ"serial"
を mode
に設定し、オプションでポートを指定するパラメータを含めport
ます。mode
に設定"serial"
し、 パラメータをport
省略した場合、 の値はport
デフォルトで /dev/ttyUSB0
になります。永続的な接続の場合は、 セクションの下に vars:
と port
を定義しますmode
。ローカル接続の場合、パラメーターは セクションの下vars:
またはモジュール引数として定義できます。
次のプレイブックは、 CONSOLE ポートを介して Junos デバイスに接続し、初期設定を読み込んでコミットします。モジュールはデフォルトのユーザーを使用し、ログインパスワードの入力を求めます。
--- - name: Load Initial Configuration hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "DEVICE_PASSWORD" prompt: "Device password" private: yes tasks: - name: Load initial configuration and commit juniper.device.config: passwd: "{{ DEVICE_PASSWORD }}" mode: "serial" load: "merge" src: "configs/junos.conf" register: response - name: Print the response debug: var: response