Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

验证在运行 Junos OS 的设备上执行 Ansible 模块的用户

身份验证概述

瞻博网络提供 Ansible 模块,可用于管理运行 Junos OS 的设备。瞻博网络模块通过juniper.deviceAnsible Galaxy 上托管的收集和Juniper.junos角色进行分发。

借助瞻博网络模块,您可以使用 SSH、telnet 或串行控制台连接直接连接到和管理运行 Junos OS 的设备。这些模块还支持通过 SSH 或 telnet 连接连接到连接到设备端口的 CONSOLE 控制台服务器来连接到设备。远程设备必须能够使用密码或其他标准 SSH 身份验证机制对用户进行身份验证,具体取决于连接协议。

使用 Ansible 管理运行 Junos OS 的设备时,访问设备的最方便方法是配置 SSH 密钥。SSH 密钥使远程设备能够识别可信用户。或者,执行模块和指南时,也可以提供用户名和密码。

对于 SSH 连接,瞻博网络模块首先尝试基于 SSH 的公开密钥身份验证,然后尝试基于密码的身份验证。使用 SSH 密钥时,所提供的密码用作解锁专用 SSH 密钥的通语。使用基于密码的身份验证时,所提供的密码将用作设备密码。如果正在使用基于 SSH 公共密钥的身份验证,并且 SSH 私有密钥有空密码,则不需要密码。但是,不建议使用带有空通话的 SSH 私有密钥。要检索基于密码的身份验证或受密码保护的 SSH 密钥的密码,您可以从指南或命令行中提示密码,或者创建一个保管库加密的数据文件,以安全地存储密码。

您可以通过以下方式为瞻博网络模块指定连接和身份验证参数。如果不明确定义值,在某些情况下会使用默认值,如 “了解瞻博网络模块的默认值”中所述。如果在多个位置定义参数的值,Ansible 将根据可变优先级选择该值,如了解官方 Ansible 文档中的 变量优先级 中所述。

  • Ansible 变量 — 您可以使用正常的 Ansible 变量(例如,在库存或保管库文件中定义的变量、主机或组变量中定义的变量)或使用命令行选项来指定连接和身份验证参数值。

  • SSH 客户端配置文件 — 对于 SSH 连接,瞻博网络模块会自动查询 ~/.ssh/config 上的默认 SSH 配置文件(如果存在),除非您定义 ssh_config 指定不同配置文件的选项。模块对给定连接使用 SSH 配置文件中的任何相关设置,除非您明确定义覆盖该设置的变量。

  • 模块参数 — 和juniper.deviceJuniper.junos模块支持将本地连接connection: local的连接和认证相关选项指定为顶层模块参数。此外,Juniper.junos模块支持在模块参数中使用提供商字典,如《如何在 Juniper.junos 模块中定义提供商参数》中所述。

  • vars: 部分 — 模块 juniper.device 支持为游戏 vars: 部分中的本地和持久连接指定连接和身份验证相关选项,详见 如何定义变体中的身份验证参数:本地和持久连接的一节

本文档介绍使用瞻博网络模块管理运行 Junos OS 的设备时身份验证的不同方面。

了解瞻博网络模块的默认值

您可以显式定义用于管理运行 Junos OS 的设备的模块的连接和身份验证参数。如果不定义参数,模块在某些情况下会使用默认值。 表 1 概述了收集和角色中的模块的通用连接参数的 juniper.device 默认值和 Juniper.junos 可变优先级。有关为各个模块接受的参数的信息,请参阅该模块的 API 参考文档。

表 1:连接参数的默认值和可变优先级

参数名称

参数别名

描述

默认值和可变优先级

host

hostname

ip

应与之建立连接的远程设备的主机名或 IP 地址。

{{ inventory_hostname }}

passwd

password

用户密码或 SSH 密钥密码,用于与受管理设备一起认证。

  1. ANSIBLE_NET_PASSWORD 环境变量

  2. 为或--ask-pass命令行选项指定的-k

ssh_config

SSH 客户端配置文件的路径。

如果省略了此参数,则模块在默认位置(如果存在)中使用 SSH 配置文件。

~/.ssh/config

ssh_private_key_file

ssh_keyfile

用于与远程设备进行身份验证的 SSH 私有密钥文件的路径。

如果未明确指定路径且未发现默认值,则该模块将使用用户 SSH 配置或操作系统特定默认中指定的 SSH 私钥文件。

  1. ANSIBLE_NET_SSH_KEYFILE 环境变量

  2. 为或--key-file命令行选项指定的--private-key

  3. 没有

user

username

用于与托管节点进行身份验证的用户名。

  1. ANSIBLE_NET_USERNAME 环境变量

  2. remote_user Ansible 定义的

  3. USER 环境变量

执行瞻博网络模块时, host 始终需要进行连接。但是,您不必明确指定主机,因为它默认指定 {{ inventory_hostname }}

您可以使用可访问运行 Junos OS 的托管设备的任何用户帐户来执行瞻博网络模块。执行这些模块时,将强制实施 Junos OS 用户帐户访问权限,为 Junos OS 用户帐户配置的类将确定权限。如果不指定用户,则根据表 1 中所述的user算法设置用户。请参阅 Ansible 文档,了解用于定义remote_user的优先级,可通过多种方式定义,包括:

  • -u--user 命令行选项

  • ANSIBLE_REMOTE_USER 环境变量

  • remote_user 配置设置

如何在变体中定义身份验证参数:本地和持久连接的一节

除了通常通过其他变量(例如,在 SSH 配置文件中、Ansible 清单文件中、命令行参数或模块参数)定义模块之外,您还可以为 juniper.device 游戏 vars: 部分中的模块定义连接和身份验证参数。该 vars: 部分允许您在单个位置定义通用连接参数,游戏中的所有模块均可用于连接到主机。此外,如此处所述,在定义游戏中的参数时,某些 Ansible 连接需要使用 vars: 该部分。

这些 juniper.device 模块支持以下 Ansible 连接类型:

  • 本地连接,通过使用 connection: local

  • 持久性连接,这是通过使用 connection: juniper.device.pyez

对于本地和持久连接,Ansible 在控制节点上本地执行模块。使用 connection: local时,Ansible 会为剧中需要连接的每个任务与主机建立单独的连接。相比之下,使用 Ansible 时 connection: juniper.device.pyez,会与主机建立单个持久连接,这种连接一直延续在执行游戏中的所有任务上。

注意:

Ansible 已经弃用了 connection: local。因此,当您使用 juniper.device 收集模块时,建议您在指南中使用 connection: juniper.device.pyez ,以避免在 Ansible 在后续版本中移除对本地连接的支持时出现问题。

您对持久连接使用与对本地连接相同的连接和身份验证参数,在 “了解瞻博网络模块的默认值”中讨论的默认参数值 适用于这两种类型的连接。但是,在一出戏中定义持久连接的连接和身份验证参数时,您必须定义该部分中的 vars: 参数,而不是将参数定义为每个任务中的顶层模块参数,因为只有一个连接,因此参数必须适用于该操作中的所有任务。对于本地连接,您可以将该部分中的 vars: 参数定义为模块参数。如果在这两个地方定义参数,则模块参数优先。

以下操作指南在库存组中的每个主机上执行两juniper.device个模块。该剧将 Ansible 连接定义为 juniper.device.pyez,它与坚持执行剧中所有任务的每个主机建立连接。持续连接的身份验证参数在游戏的vars:一节中定义。user在保管库文件中定义的vault-vars.yamlpasswd值参考变量。

如何在 Juniper.junos 模块中定义提供商参数

Juniper.junos从版本 2.0.0 开始,Juniper.junos这些模块除了支持每个连接和认证相关参数的个别顶层模块参数外,还支持provider该参数。该provider参数允许您为一个位置的多个模块定义连接和身份验证参数,并可轻松将这些值传递给使用这些模块的模块。此外,如果您以后需要更新参数,则只需要在单个位置进行更新。

注意:

收集 juniper.device 模块不支持使用参数 provider

provider 论点接受一本字典,其中包含与设备连接和验证所需的连接详细信息。该 host 参数始终是连接的必备项,但如果模块使用 默认值,则无需明确指定值 host。字典可选择定义连接所需的附加参数,包括 userpasswdssh_private_key_file等。有关为各个模块接受的参数的信息,请参阅该模块的 API 参考文档。

在以下示例中credentials,变量是定义和参数的hostuserpasswd字典:

以下示例指南使用单个 provider 参数将连接详细信息传递至模块, juniper_junos_facts 而不是定义单个模块参数。添加使用 Juniper.junos 这些模块的附加任务时,您可以为每个模块参考同一字典。

如何使用 SSH 密钥对用户进行身份验证

借助瞻博网络 juniper.deviceJuniper.junos 模块,您可以使用 SSH 密钥连接到运行 Junos OS 的设备或连接到设备的控制台服务器。要使用 SSH 密钥对用户进行身份验证,请先在 Ansible 控制节点上生成密钥,然后配置模块要连接到的设备上的密钥,即运行 Junos OS 的托管设备或连接到运行 Junos OS 的设备的控制台服务器。

生成和配置 SSH 密钥

要在 Ansible 控制节点上生成 SSH 密钥并在远程设备上配置公共密钥:

  1. 在 Ansible 控制节点上,为所需用户生成公共和专用 SSH 密钥对,并提供任何必要的选项,例如:
  2. (可选)将密钥加载到本机 SSH 密钥代理中。例如:
  3. 模块要连接的每个设备上配置公钥,其中可能包括运行 Junos OS 的设备或连接到运行 Junos OS 的设备的控制台服务器。

    在运行 Junos OS 的设备上配置公钥的最简单方法是在适当的用户帐户下加载包含公共密钥的文件。

  4. 使用密钥登录设备以验证密钥是否工作。

在 Ansible 指南中使用 SSH 密钥

生成 SSH 密钥对并在远程设备上配置公共密钥之后,您可以使用密钥连接到设备。如果存在,瞻博网络模块会自动查询 ~/.ssh/config 上的默认 SSH 配置文件,除非您定义 ssh_config 指定不同配置文件的选项。模块对给定连接使用 SSH 配置文件中的任何相关设置,除非您明确定义覆盖该设置的变量。此外,这些模块会自动查找默认位置中的密钥,以及在 SSH 密钥代理中主动加载的密钥。

要定义 SSH 密钥的特定设置,您可以在 Ansible 指南中包含相应的参数。在适合您一组模块和 Ansible 连接的位置定义参数,例如,在该部分中 vars: 用于使用 juniper.device 带有持久连接的模块的播放。要包含的参数由密钥的位置、密钥是否主动加载到 SSH 密钥代理中、密钥是否受密码保护,以及用户的 SSH 配置文件是否已定义该主机的设置来确定。

  • 要使用在本机 SSH 密钥代理中主动加载或处于默认位置且没有密码保护的 SSH 密钥连接到运行 Junos OS 的设备,您无需定义任何连接或认证相关参数,除非它们与默认不同。

  • 要使用不在默认位置且没有密码保护的 SSH 密钥连接到运行 Junos OS 的设备,请将参数设置 ssh_private_key_file 为 SSH 私有密钥文件的路径。例如:

    或者,您也可以在 SSH 配置文件中定义 SSH 私有密钥的路径; ANSIBLE_NET_SSH_KEYFILE 设置环境变量;或者在执行指南时定义 --private-key--key-file 命令行选项。

  • 要使用受密码保护的 SSH 密钥文件(这是建议的方法)连接到运行 Junos OS 的设备,您可以参考争论中的 passwd SSH 密钥文件密码,或者使用正常的 Ansible 变量或命令行选项提供密码。

    用户有责任以适合其环境的安全方式获取 SSH 密钥文件措辞。最好在操作指南的每次调用期间提示,或使用加密保管库存储变量,而不是以未加密格式存储凭据。例如,您可以使用 --ask-pass 命令行选项执行操作指南,并在出现提示时提供 SSH 密钥文件密码,如 以下所示:

    有关如何使用提示或加密的保管库文件获取 SSH 密钥密码的详细信息,请参阅 如何使用指南或命令行密码提示符验证用户 以及 如何使用 Ansible 保管库加密文件对用户进行身份验证

有关使用 SSH 密钥连接到控制台服务器的说明,请参阅 如何通过控制台服务器进行身份验证

如何使用指南或命令行密码提示符验证用户

要对执行 Ansible 模块的用户进行身份验证,您可以在执行指南时提示用户的凭据。例如,您可以在指南中定义交互提示,或者使用或--ask-pass命令行选项执行操作手册-k以提示密码。使用 SSH 密钥时,所提供的密码用作解锁专用 SSH 密钥的通语。使用基于密码的身份验证时,所提供的密码将用作设备密码。

要在指南中定义交互提示以获取用户的密码或 SSH 密钥密码,请执行以下操作:

  1. 在该提示下 vars_prompt: 包含代码,以获取用户密码或 SSH 密钥密码(可选为用户名),并将值存储在变量中。
  2. user设置和passwd参数,以便每个参考各自的变量。
  3. 执行操作手册,该指南提示用户名和密码,并且不会回应命令行上的密码,因为变量设置为 private: yes

或者,您也可以使用或--ask-pass命令行选项执行操作手册-k,以提示密码或密码。请考虑以下操作指南,其中使用默认用户名:

执行指南,并包括 -k 命令 --ask-pass 行选项,此选项提示密码且不会回应命令行上的密码。

如何使用 Ansible 保管库加密文件验证用户

您可以创建 Ansible 保管库,在保管库加密的数据文件中安全地存储保存的密码和其他敏感连接和身份验证值。然后,您的指南可以引用适合您一组模块和 Ansible 连接类型的位置中的这些变量,例如,在游戏的 vars: 部分或模块参数中。

要创建并使用包含所需变量的 Ansible 保管库文件,包括密码:

  1. 创建保管库加密的数据文件,并指定加密、解密、编辑和使用数据文件所需的密码。
  2. 定义文件中所需的变量并保存。
  3. 验证文件是否加密。
  4. 在指南中,包括保管库加密的可变文件,并参考适合您的模块和 Ansible 连接类型的位置中所需的变量。
    注意:

    如果改为定义保管库中的实际 userpasswd 变量,则模块会自动拾取,并且不需要在指南中明确定义它们。

  5. 使用 选项执行操作手册 --ask-vault-pass ,选项提示保管库密码。

如何通过控制台服务器进行身份验证

瞻博网络 Ansible 模块可通过控制台服务器连接到运行 Junos OS 的设备。对于通过控制台服务器的 SSH 连接,您需要为控制台服务器和运行 Junos OS 的设备提供认证凭据。您可以提供设备密码或密码保护的 SSH 密钥文件,以进行控制台服务器身份验证。

要通过控制台服务器连接到运行 Junos OS 的设备,如果没有默认值或默认值不合适,则必须在指南中提供以下参数:

  • host—控制台服务器主机名或 IP 地址

  • userpasswd— Junos OS 登录凭据

  • cs_user—控制台服务器用户名

  • cs_passwd—使用控制台服务器验证所需的设备密码或 SSH 密钥文件密码

在以下示例中,Junos OS 用户和控制台服务器用户的凭据在 Ansible 保管库文件中定义。然后在指南中引用保管库变量。在这种情况下,该 cs_passwd 论点是该论点中指定的 SSH 密钥的 ssh_private_key_file 直言。