验证 Junos PyEZ 用户
总结 Junos PyEZ 应用程序可以使用标准 SSH 身份验证机制(包括密码和 SSH 密钥)对用户进行身份验证。
Junos PyEZ 用户身份验证概述
Junos PyEZ 使您能够使用串行控制台连接、telnet 或通过 SSH 的 NETCONF 会话直接连接到和管理 Junos 设备。此外,Junos PyEZ 还支持通过 telnet 或 SSH 连接到连接到设备 CONSOLE
端口的控制台服务器。设备必须能够使用密码或其他标准 SSH 身份验证机制对用户进行身份验证,具体取决于连接方法。通过 SSH 连接管理 Junos 设备时,访问设备的最方便、最安全的方式是配置 SSH 密钥。SSH 密钥使远程设备能够识别受信任的用户。
您可以使用有权访问托管 Junos 设备的任何用户帐户执行设备操作。可以在创建类的新 jnpr.junos.device.Device
实例时显式定义用户,或者如果未在参数列表中指定用户,则用户默认为 $USER
。
对于 SSH 连接,Junos PyEZ 会自动在 ~/.ssh/config 查询默认 SSH 配置文件(如果存在),除非 Device
参数列表包含用于指定其他配置文件的 ssh_config
参数。Junos PyEZ 使用给定连接的 SSH 配置文件中未被参数列表中的参数 Device
(如用户或标识文件)覆盖的任何相关设置。
当 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 设备时,如果参数未指定密码或 SSH 密钥文件,Junos Device
PyEZ 将首先检查 SSH 密钥代理中主动加载的 SSH 密钥,然后在默认位置检查 SSH 密钥。连接到控制台服务器时,仅支持受密码保护的密钥。
以下各节概述了生成 SSH 密钥、在 Junos 设备上配置密钥以及使用这些密钥连接到受管设备的步骤:
生成和配置 SSH 密钥
要在配置管理服务器上生成 SSH 密钥并在 Junos 设备上配置公钥,请执行以下操作:
在 Junos PyEZ 应用程序中引用 SSH 密钥
在远程设备上生成 SSH 密钥对并配置公钥后,可以通过在构造函数代码中包含 Device
适当的参数来使用该密钥连接到设备。参数 Device
由密钥的位置、密钥是否受密码保护、密钥是否主动加载到 SSH 密钥代理(如 ssh-agent)以及用户的 SSH 配置文件是否已定义该主机的设置来确定。以下各节概述了各种方案:
使用具有主动加载密钥的 SSH 密钥代理对用户进行身份验证
您可以使用 SSH 密钥代理来安全地存储私钥,并避免重复重新键入受密码保护的密钥的密码短语。Junos PyEZ 使客户端能够使用主动加载到 SSH 密钥代理中的 SSH 密钥直接连接到 Junos 设备。连接到 Junos 设备时,如果参数未指定密码或 SSH 密钥文件,Junos Device
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 私钥文件路径,则可以省略
ssh_private_key_file
参数列表中的参数Device
。包含该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 地址将 和
passwd
参数user
设置为包含 Junos OS 登录凭据的变量将
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) # ...