Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

对 Junos PyEZ 用户进行身份验证

Junos PyEZ 应用可以使用密码或其他标准 SSH 身份验证机制对用户进行身份验证。

Junos PyEZ 用户身份验证概述

Junos PyEZ 允许您使用串行控制台连接、telnet 或通过 SSH 的 NETCONF 会话直接连接到并管理 Junos 设备。Junos PyEZ 还支持通过 telnet 或 SSH 连接到连接到设备 CONSOLE 端口的控制台服务器。此外,Junos PyEZ 还可以通过中间设备(如防御主机或跳转主机)连接到设备。

远程设备必须能够使用密码或其他标准 SSH 身份验证机制对用户进行身份验证,具体取决于连接方法。通过 SSH 连接管理 Junos 设备时,最方便、最安全的设备访问方式是配置 SSH 密钥。SSH 密钥使远程设备能够识别受信任的用户。

您可以使用有权访问托管 Junos 设备的任何用户帐户执行设备操作。在创建类的新 jnpr.junos.device.Device 实例时,可以显式定义用户。如果未指定用户,则用户默认为环境变量的 $USER 值。

对于 SSH 连接,Junos PyEZ 会自动查询位于 ~/.ssh/config 的默认 SSH 配置文件(如果存在)。您还可以在Device参数列表中包括ssh_config以指定不同的配置文件。Junos PyEZ 使用 SSH 配置文件中未被参数列表中的参数Device覆盖的任何相关设置,如用户或身份文件。

使用 SSH 连接到设备时,Junos PyEZ 会先尝试基于 SSH 公钥的身份验证,然后再尝试基于密码的身份验证。使用基于密码的身份验证时,提供的密码将用作设备密码。使用 SSH 密钥时,提供的密码是用于解锁私有密钥的密码。如果将密钥加载到 SSH 密钥代理中,或者 SSH 私有密钥的密码为空,则无需提供密码。但是,我们不建议使用带有空密码的 SSH 私钥。

注意:

以适合您环境的安全方式获取凭据。最佳做法是每次运行脚本时提示输入凭据,而不是以未加密的格式存储凭据。

以下部分讨论不同的身份验证方法。

使用密码对 Junos PyEZ 用户进行身份验证

要使用密码对 Junos PyEZ 用户进行身份验证:

  1. 在您喜欢的编辑器中,创建一个使用 .py 文件扩展名的新文件。

    此示例使用文件名 junos-pyez-pw.py。

  2. 包括提示输入要连接的主机名或 IP 地址,以及 Junos 设备的用户名和密码的代码。
  3. 如果 Junos PyEZ 客户端通过与控制台服务器的 SSH 连接连接到设备,请提示您输入控制台服务器用户名和密码。
  4. 如果 Junos PyEZ 客户端连接到的端口与默认端口不同,请提示输入端口号。
  5. 在 Device 构造函数参数列表中:
    • 将参数设置为 host 包含远程设备的主机名或 IP 地址的变量。

    • 将 和 passwd 参数设置为user包含 Junos OS 登录凭据的变量。

    • 如果 Junos PyEZ 客户端通过 SSH 连接连接到控制台服务器,请将 和 cs_user cs_passwd 参数设置为包含控制台服务器登录凭据的变量。

    • 如果 Junos PyEZ 客户端连接到非默认端口,请酌情将参数设置为 port 包含端口的变量。

    • 包括连接方法所需的任何其他参数。

    以下示例提供了每种不同连接方法的示例代码:

    注意:

    默认情况下,所有运行 Junos OS 的平台都仅配置 root 用户,没有任何密码。使用 Junos PyEZ 通过控制台连接初始配置新的设备或归零的设备时,请使用 user='root'并省略该 passwd 参数。

  6. 执行 Junos PyEZ 代码。

    程序将提示输入主机名、Junos OS 用户名和密码、控制台服务器用户名和密码(请求时)以及端口(请求时)。该程序不会回显命令行上的密码。

使用 SSH 密钥对 Junos PyEZ 用户进行身份验证

要在 Junos PyEZ 应用程序中使用 SSH 密钥,必须先在配置管理服务器上生成密钥。然后,在 Junos PyEZ 客户端将连接的每台设备上配置公共密钥。这些设备可能包括 Junos 设备、控制台服务器或堡垒或跳转主机。要使用键,您必须在参数列表中包含相应的 Device 参数。

Junos PyEZ 可以利用主动加载到 SSH 密钥代理中的 SSH 密钥、在默认位置或用户定义位置生成的密钥,以及使用或放弃密码保护的密钥。如果参数未指定密码或引用 SSH 密钥文件,则 Device Junos PyEZ 将首先检查 SSH 密钥代理中活动加载的 SSH 密钥,然后检查默认位置中的 SSH 密钥。连接到控制台服务器时,SSH 密钥必须受密码保护。

以下部分概述了生成 SSH 密钥、在远程设备上配置密钥以及使用密钥连接到托管设备的步骤:

生成和配置 SSH 密钥

要在配置管理服务器上生成 SSH 密钥并在远程设备上配置公共密钥,请执行以下操作:

  1. 在服务器上,为所需用户生成公钥和私钥对,并提供任何必需或所需的选项。例如:
  2. (可选)将密钥加载到本机 SSH 密钥代理中。
  3. 在 Junos PyEZ 应用程序将连接到的每台设备上,在相应的用户帐户下配置公钥,其中可能包括 Junos 设备、控制台服务器、堡垒或跳转主机。
    • 要在 Junos 设备上配置公共密钥,一种方法是从文件加载密钥。

    • 要在服务器或 jumphost 上配置公钥,可以使用命令 ssh-copy 。

  4. 通过使用密钥登录设备来验证密钥是否正常工作。

引用 Junos PyEZ 应用程序中的 SSH 密钥

在远程设备上生成 SSH 密钥对并配置公共密钥后,Junos PyEZ 应用程序可以使用该密钥连接到设备。要使用该键,请在构造函数中 Device 包含相应的参数。 Device 参数由下式决定:

  • 密钥的位置

  • 密钥是否已主动加载到 SSH 密钥代理(如 ssh-agent)中

  • 密钥是否受密码保护

  • 用户的 SSH 配置文件是否已为该主机定义了设置

以下部分概述了各种方案:

将 SSH 密钥代理与活动加载的密钥配合使用

您可以使用 SSH 密钥代理或身份验证代理来安全存储私有密钥,并避免反复重新键入受密码保护的密钥的密码短语。Junos PyEZ 客户端可以使用主动加载到 SSH 代理中的 SSH 密钥连接到设备。默认情况下,如果参数未指定密码或引用 SSH 密钥文件,则 Device Junos PyEZ 会先检查 SSH 密钥代理中活动加载的 SSH 密钥,然后检查默认位置中的 SSH 密钥。请注意, Device 可以在参数列表中显式设置 SSH 密钥文件,也可以通过 SSH 配置文件中的设置来设置。

要使用主动加载到本机 SSH 密钥代理中的 SSH 密钥连接到设备:

  • 要直接连接到 Junos 设备,只需在 Device 参数列表中提供所需的主机名或 IP 地址。

  • 要通过防御主机或跳转主机连接到 Junos 设备,请设置为 host Junos 设备的主机名或 IP 地址,并包含 proxy_command 定义通过跳转主机进行连接的参数。

构 Device 造函数还支持该 allow_agent 参数,以提供对何时使用 SSH 密钥代理的更精细的控制。 表 1 概述了设置。

表 1: Device allow_agent参数
allow_agent价值观 行为

None(默认)

仅当参数未指定密码或引用私钥文件(显式作为参数或通过 SSH 配置文件)时 Device ,SSH 连接才会使用 SSH 代理中的密钥。

True

SSH 连接使用在 SSH 代理中加载的密钥。

False

SSH 连接不使用 SSH 代理中的密钥。

例如,假设您在 SSH 密钥代理中加载主机的 SSH 密钥。此外,您的 SSH 配置文件还包含一个主机条目,用于定义IdentityFile包含该主机的私钥文件的选项。在 Junos PyEZ 应用程序中,您可以创建并仅host定义参数的实例Device。默认情况下,Device使用由 IdentityFile定义的私钥文件。由于参数引用的是私钥文件,因此 Device Junos PyEZ 不会检查 SSH 密钥代理。如果私钥文件具有密码,则连接将失败,因为未提供密码。因此,要使用 SSH 代理但在 SSH 配置文件中保留该IdentityFile选项,可以将 allow_agent=True设置为 。

使用没有密码保护的 SSH 密钥

Junos PyEZ 使客户端能够使用没有密码保护的 SSH 私钥直接连接到 Junos 设备。但是,我们不建议使用带有空密码的 SSH 私钥。Junos PyEZ 不支持使用带有空密码的 SSH 私钥连接到控制台服务器。

要使用默认位置且没有密码保护的 SSH 密钥连接到 Junos 设备:

  • 在 Device 参数列表中,您只需要提供所需的主机名或 IP 地址。

    Junos PyEZ 首先检查活动 SSH 密钥代理中加载的 SSH 密钥,然后检查默认位置的 SSH 密钥。

要使用不在默认位置且没有密码保护的 SSH 密钥连接到 Junos 设备:

  • 在 Device 参数列表中,将参数设置为 ssh_private_key_file SSH 私钥的路径。

    注意:

    如果用户的 SSH 配置文件已为给定主机指定了本地 SSH 私钥文件路径,则可以省略参数列表中的ssh_private_key_fileDevice参数。包含该ssh_private_key_file参数将覆盖用户 SSH 配置文件中为主机定义的任何现有IdentityFile值。

使用受密码保护的 SSH 密钥

Junos PyEZ 客户端可以使用受密码保护的 SSH 密钥直接连接到 Junos 设备、通过防御主机或跳转主机连接到 Junos 设备,或连接到连接到设备的控制台服务器。以下部分概述了如何显式定义 Device 受密码保护的 SSH 密钥的参数。要改用活动 SSH 密钥代理中加载的受密码保护的密钥,请参阅将 SSH 密钥代理与活动加载的密钥配合使用。

直接连接到 Junos 设备

要使用受密码保护的 SSH 密钥直接连接到 Junos 设备:

  1. 包括提示输入 SSH 私钥密码并将值存储在变量中的代码。

  2. 在 Device 参数列表中:

    • 设置 passwd 参数以引用包含 SSH 密钥文件密码的变量。

    • 如果密钥不在默认位置,并且 SSH 配置文件尚未定义私钥文件路径,则将参数设置为 ssh_private_key_file 私钥的路径。

通过跳转主机连接

要通过防御主机或跳转主机对两台设备都使用受密码保护的 SSH 密钥连接到 Junos 设备:

  1. 包括提示输入网络设备的 SSH 私钥密码并将该值存储在变量中的代码。

  2. 在 Device 参数列表中:

    • 将参数设置为 host Junos 设备的主机名或 IP 地址。

    • 设置参数 passwd 以引用包含 Junos 设备的 SSH 密钥文件密码的变量。

    • 如果密钥不在默认位置,且 SSH 配置文件尚未定义私有密钥文件路径,请将参数设置为 ssh_private_key_file Junos 设备的私有密钥路径。

    • 如果需要,请包含 proxy_command 参数并定义跳转主机的连接,包括用户和身份文件。

执行脚本时,脚本会提示输入私钥的密码。

通过控制台服务器连接

要通过使用受密码保护的 SSH 密钥文件的控制台服务器连接到 Junos 设备:

  1. 包括提示输入 Junos 设备登录凭据并将每个值存储在变量中的代码。

  2. 包括提示输入控制台服务器用户名和私钥密码并将每个值存储在变量中的代码。

  3. 在 Device 参数列表中:

    • 将参数设置为 host 控制台服务器主机名或 IP 地址。

    • 将 和 passwd 参数设置为user包含 Junos OS 登录凭据的变量。

    • 将参数设置为 cs_user 包含控制台服务器用户名的变量。

    • 将参数设置为 cs_passwd 包含 SSH 密钥文件密码的变量。

    • 如果密钥不在默认位置,并且 SSH 配置文件尚未定义私钥文件路径,则将参数设置为 ssh_private_key_file 私钥的路径。

    • 将参数设置为 port 映射到控制台服务器上 TTY 设备的 TCP 端口。