Junos PyEZユーザーの認証
概要 Junos PyEZアプリケーションは、パスワードやSSHキーなど、標準のSSH認証メカニズムを使用してユーザーを認証できます。
Junos PyEZ ユーザー認証の概要
Junos PyEZを使用すると、シリアルコンソール接続、telnet、またはSSH経由のNETCONFセッションを使用して、Junosデバイスに直接接続して管理することができます。さらに、Junos PyEZは、デバイスの CONSOLE
ポートに接続されているコンソールサーバーへのtelnetまたはSSH接続を介したデバイスへの接続もサポートしています。デバイスは、接続方法に応じて、パスワードまたはその他の標準SSH認証メカニズムを使用してユーザーを認証できる必要があります。SSH 接続を使用して Junos デバイスを管理する場合、デバイスにアクセスする最も便利で安全な方法は、SSH キーを設定することです。SSHキーにより、リモートデバイスは信頼できるユーザーを識別できます。
管理対象のJunosデバイスにアクセスできるユーザーアカウントを使用して、デバイス操作を実行できます。クラスの新しいインスタンス jnpr.junos.device.Device
を作成するときにユーザーを明示的に定義できますが、パラメーター リストでユーザーを指定しない場合、ユーザーのデフォルトは $USER
になります。
SSH接続の場合、引数リストに別の設定ファイルを指定する引数が含まれていないssh_config
限り、Junos PyEZはデフォルトのSSH設定ファイル(~Device
/.ssh/config)に対して自動的にクエリーを実行します。Junos PyEZは、ユーザーファイルやIDファイルなど、引数リストの引数Device
によって上書きされない、指定された接続のSSH設定ファイル内の関連設定を使用します。
Junos PyEZクライアントがSSHを使用してJunosデバイスまたはデバイスに接続されているコンソールサーバーに接続する場合、Junos PyEZはまずSSHパブリックキーベースの認証を試み、次にパスワードベースの認証を試みます。SSHキーが使用されている場合、提供されたパスワードが秘密キーのロックを解除するためのパスフレーズとして使用されます。パスワードベースの認証を使用する場合、指定されたパスワードがデバイスパスワードとして使用されます。SSH公開キーベースの認証が使用されており、SSHプライベートキーのパスフレーズが空の場合、パスワードは必要ありません。ただし、空のパスフレーズを含むSSHプライベートキーは推奨されません。
ユーザー名とパスワードの認証資格情報を、環境に適した安全な方法で取得するのはユーザーの責任です。暗号化されていない形式で資格情報を格納するのではなく、スクリプトを呼び出すたびにこれらの認証資格情報の入力を求めることをお勧めします。
パスワードを使用してJunos PyEZユーザーを認証する
パスワードを使用してJunos PyEZユーザーを認証するには、次の手順に従います。
SSHキーを使用したJunos PyEZユーザーの認証
Junos PyEZアプリケーションでSSHキーを使用するには、まず構成管理サーバーでキーを生成し、Junos PyEZクライアントが接続する各デバイスで公開キーを設定する必要があります。Junos デバイスに直接接続するには、そのデバイスでキーを設定します。コンソール サーバー経由でJunosデバイスに接続するには、コンソール サーバーでキーを構成します。キーを使用するには、引数リストに適切な引数 Device
を含める必要があります。
Junos PyEZでは、SSHキーエージェントにアクティブにロードされるSSHキー、デフォルトの場所またはユーザー定義の場所で生成されるキー、パスワード保護を使用または放棄するキーを利用できます。Junosデバイスに直接接続する場合、引数に Device
パスワードまたはSSHキーファイルが指定されていない場合、Junos PyEZはまずSSHキーエージェントにアクティブにロードされているSSHキーをチェックし、次にデフォルトの場所にあるSSHキーをチェックします。コンソール・サーバーに接続する場合、パスワードで保護されたキーのみがサポートされます。
以下のセクションでは、SSHキーの生成、Junosデバイスでのキーの設定、キーを使用した管理対象デバイスへの接続の手順の概要を説明します。
SSHキーを生成および設定する
構成管理サーバーで SSH キーを生成し、Junos デバイスで公開キーを構成するには:
Junos PyEZ アプリケーションでの参照 SSH キー
SSH キーペアを生成し、リモートデバイスで公開キーを構成した後、コンストラクターコードに Device
適切な引数を含めることで、キーを使用してデバイスに接続できます。引数は Device
、鍵の場所、鍵がパスワードで保護されているかどうか、鍵が ssh-agent などの SSH 鍵エージェントにアクティブにロードされているかどうか、およびユーザーの SSH 構成ファイルでそのホストの設定が既に定義されているかどうかによって決まります。次のセクションでは、さまざまなシナリオの概要を説明します。
- アクティブにロードされたキーによるSSHキーエージェントを使用したユーザーの認証
- パスワード保護なしでSSHキーを使用してユーザーを認証する
- パスワードで保護されたSSHキーファイルを使用したユーザーの認証
アクティブにロードされたキーによるSSHキーエージェントを使用したユーザーの認証
SSH 鍵エージェントを使用すると、秘密鍵を安全に保管し、パスワードで保護された鍵のパスフレーズを繰り返し再入力する必要がなくなります。Junos PyEZを使用すると、クライアントは、SSHキーエージェントにアクティブにロードされているSSHキーを使用してJunosデバイスに直接接続できます。Junosデバイスに接続する際、引数に Device
パスワードまたはSSHキーファイルが指定されていない場合、Junos PyEZはまずSSHキーエージェントにアクティブにロードされているSSHキーをチェックし、次にデフォルトの場所にあるSSHキーをチェックします。
ネイティブのSSHキーエージェントにアクティブにロードされているSSHキーを使用して、Junosデバイスに直接接続するには、次の手順に従います。
Device
引数リストには、必要なホスト名と必要な変数を指定するだけで済みます。dev = Device(host='router.example.com')
パスワード保護なしでSSHキーを使用してユーザーを認証する
Junos PyEZを使用すると、クライアントはパスワードで保護されていないSSHプライベートキーを使用してJunosデバイスに直接接続できます。ただし、空のパスフレーズとともにSSHプライベートキーを使用することはお勧めしません。Junos PyEZは、空のパスフレーズを持つSSHプライベートキーを使用したコンソールサーバーへの接続をサポートしていません。
デフォルトの場所にあり、パスワードで保護されていない SSH キーを使用して Junos デバイスに接続するには、次の手順に従います。
Device
引数リストには、必要なホスト名と必要な変数を指定するだけで済みます。dev = Device(host='router.example.com')
Junos PyEZは、まずアクティブなSSHキーエージェントにロードされているSSHキーをチェックし、次にデフォルトの場所にあるSSHキーをチェックします。
デフォルトの場所になく、パスワードで保護されていないSSHキーを使用してJunosデバイスに接続するには、次の手順に従います。
Device
引数リストで、引数をssh_private_key_file
SSH 秘密キーのパスに設定します。dev = Device(host='router.example.com', ssh_private_key_file='/home/user/.ssh/id_rsa_dc')
メモ:ユーザーの SSH 構成ファイルで、特定のホストのローカル SSH 秘密キー ファイルのパスが既に指定されている場合は、引数リストの引数
Device
を省略ssh_private_key_file
できます。引数を含めると、ssh_private_key_file
ユーザーのSSH設定ファイルでホストに定義されている既存のIdentityFile
値が上書きされます。
パスワードで保護されたSSHキーファイルを使用したユーザーの認証
Junos PyEZクライアントは、パスワードで保護されたSSHキーファイルを使用して、Junosデバイスに直接接続したり、デバイスに接続されているコンソールサーバーに接続したりできます。
パスワードで保護されたSSHキーファイルを使用してJunosデバイスに直接接続するには、次の手順に従います。
パスワードで保護されたSSHキーファイルを使用して、コンソールサーバー経由でJunosデバイスに接続するには、次の手順に従います。
-
Junos デバイスのログイン資格情報の入力を求め、各値を変数に格納するコードを含めます。
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ')
コンソール・サーバーのユーザー名とSSH秘密鍵のパスワードの入力を求め、各値を変数に格納するコードを含めます。
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') key_password = getpass('Password for SSH private key file: ')
Device
コンストラクター引数リストで、次の操作を行います。引数を
host
コンソール・サーバーのホスト名またはIPアドレスに設定しますuser
Junos OSのログイン資格情報を含む変数に およびpasswd
引数を設定します引数を
cs_user
、コンソール・サーバーのユーザー名を含む変数に設定します。cs_passwd
SSHキーファイルのパスワードを含む変数に引数を設定しますssh_private_key_file
キーがデフォルトの場所になく、ファイルパスがユーザーのSSH設定ファイルでまだ定義されていない場合は、引数をプライベートキーのパスに設定します
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') key_password = getpass('Password for SSH private key file: ') with Device(host='router.example.com', user=junos_username, passwd=junos_password, cs_user=cs_username, cs_passwd=key_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc') as dev: print (dev.facts) # ...