Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

如何为 Junos OS 用户验证 Salt

Salt for Junos OS 用户身份验证概述

使用 Salt 管理运行 Junos OS 的设备时,Junos 代理工作节点会使用 ZeroMQ 事件总线连接到 Salt 主节点,并使用瞻博网络 Junos PyEZ 库通过 SSH 与运行 Junos OS 的设备建立 NETCONF 会话。受管设备必须能够使用密码或其他标准 SSH 身份验证机制对 Salt 用户进行身份验证,具体取决于连接方法。使用 Salt 管理运行 Junos OS 的设备时,访问设备的最方便、最安全的方式是配置 SSH 密钥,这样远程设备就可以识别受信任的用户。或者,您可以在给定设备的代理配置文件中提供用户名和密码身份验证凭据。

要使用 Salt 连接到和管理运行 Junos OS 的设备,请在 Salt 主服务器上支柱文件中的密钥下 proxy 为设备定义必要的连接和身份验证信息。指定 proxytype: junos时,可以在支柱数据中定义许多相同的连接和身份验证参数,这些参数可以在 Junos PyEZ Device() 构造函数中指定。

以下示例 pillar 文件显示了在指定 proxytype: junos时可以在密钥下proxy定义的常规连接和身份验证参数。表 1 概述了参数。

表 1:Junos 代理参数

参数

描述

host: hostname

运行 Junos OS 的设备的主机名或 IP 地址。

password: secret

用户的密码短语或用户的 SSH 私钥文件,用于向运行 Junos OS 的设备进行身份验证。

port: port

用于与运行 Junos OS 的设备建立连接的端口。

proxytype: junos

指定 Salt 应使用 Junos 代理模块与运行 Junos OS 的设备进行接口。

ssh_config: file-path

代理工作节点服务器上 Salt 用户的 SSH 配置文件的路径。如果 SSH 配置文件位于默认路径中,则可以省略此参数。

ssh_private_key_file: file-path

代理工作节点服务器上 Salt 用户的 SSH 私钥文件的路径,Junos 代理使用该密钥文件向运行 Junos OS 的设备进行身份验证。如果用户的 SSH 密钥文件位于默认路径中,或者路径已在 SSH 配置文件中定义,则可以省略此参数。

username: user

用于向运行 Junos OS 的设备进行身份验证且在其 Junos OS 帐户权限下执行 Salt 操作的用户名。

Salt 可以使用有权访问运行 Junos OS 的受管设备的任何用户帐户来执行设备操作。您可以通过在运行 Junos OS 的给定设备的代理配置中包含参数来 username 显式指定用户。您还可以在 SSH 配置文件中指定用户。如果未指定用户,则默认为当前用户。

通过 Junos PyEZ 的 Salt 连接会自动在代理工作节点服务器上的 ~/.ssh/config 查询用户的默认 SSH 配置文件(如果存在),除非该设备的代理配置包含用于指定其他配置文件的 ssh_config 参数。Salt 在给定连接的 SSH 配置文件中使用任何相关设置,这些设置不会被该设备的代理配置中定义的参数(例如用户或标识文件)覆盖。

Junos 代理首先尝试基于 SSH 公钥的身份验证,然后尝试基于密码的身份验证。Junos 代理检查 SSH 密钥代理中主动加载的 SSH 密钥,然后在默认位置检查 SSH 密钥。使用 SSH 密钥时,提供的密码将用作解锁私钥的密码。使用基于密码的身份验证时,提供的密码将用作设备密码。如果使用基于 SSH 公钥的身份验证,并且 SSH 私钥的密码为空,则不需要密码。但是,我们不建议使用带有空密码的 SSH 私钥。

在 Salt 主服务器上,pillar top 文件将代理 ID 映射到包含设备代理配置的pillar文件。

为运行 Junos OS 的设备启动 Junos 代理工作节点进程并对 Salt 主服务器上的密钥进行授权时,它将使用配置的身份验证方法进行连接。

有关配置 Salt 服务器的详细信息,请参阅 如何为 Junos OS 安装 Salt

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

要使用密码对 Salt 用户进行身份验证,请执行以下操作:

  1. 在运行 Junos OS 的设备上,使用将用于连接到设备的密码配置用户帐户,然后提交配置。例如:
  2. 在 Salt 主服务器上,在包含设备代理配置的 pillar 文件中,将 和 password 参数username设置为该设备的 Junos OS 登录凭据。
    注意:

    有关在 Salt 中安全存储敏感数据的信息,请参阅 https://docs.saltstack.com/en/latest/topics/best_practices.html#storing-secure-data

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

要使用 SSH 密钥对 Salt 用户进行身份验证,必须先在 Salt 代理工作节点服务器上生成密钥,并在 Salt 将连接到的每台运行 Junos OS 的设备上配置公钥。若要使用这些密钥,必须在 Salt 主节点上的设备代理配置中包含相应的参数。通过 Junos PyEZ 的 salt 连接可以使用主动加载到 SSH 密钥代理中的 SSH 密钥、在默认位置或用户定义位置生成的 SSH 密钥,以及使用或放弃密码保护的密钥。Junos 代理首先检查 SSH 密钥代理中主动加载的 SSH 密钥,然后在用户的 .ssh 目录下的默认位置检查 SSH 密钥。

以下各节概述了生成 SSH 密钥、在运行 Junos OS 的设备上配置密钥以及使用这些密钥连接到受管设备的步骤。

生成和配置 SSH 密钥

要在 Salt 代理工作节点服务器上生成 SSH 密钥,并在运行 Junos OS 的设备上配置公钥,请执行以下操作:

  1. 在 Salt 代理工作节点服务器上,为所需用户生成公有和私有 SSH 密钥对,并提供任何必需或所需的选项,例如:
  2. (可选)使用特定于您的操作系统和代理的命令将密钥加载到本机 SSH 密钥代理中。例如:
  3. 在 Salt 将连接到的每台运行 Junos OS 的设备上,在相应的用户帐户下配置公钥。

    在运行 Junos OS 的设备上配置公钥的最简单方法是加载包含公钥的文件。

  4. 通过使用密钥登录设备来验证密钥是否有效。

引用 Salt 代理配置文件中的 SSH 密钥

在运行 Junos OS 的受管设备上生成 SSH 密钥对并配置公钥后,Junos 代理可以使用该密钥连接到设备。若要使用该密钥,必须在 Salt 主节点上的设备代理配置中包含相应的参数。除了必需 proxytype 的和 host 参数之外,使用 SSH 密钥所需的参数还取决于密钥的位置、密钥是否受密码保护、密钥是否主动加载到 SSH 密钥代理中,以及用户的 SSH 配置文件是否已定义该主机的设置。

Junos 代理在代理工作节点服务器上的 ~/ .ssh/config 查询默认 SSH 配置文件(如果存在),除非该设备的代理配置包含用于指定其他配置文件的 ssh_config 参数。Salt 使用给定连接的 SSH 配置文件中的任何相关设置,这些设置不会被该设备的代理配置中定义的参数覆盖。连接到设备时,Junos 代理首先检查 SSH 密钥代理中主动加载的 SSH 密钥,然后在用户的 .ssh 目录下的默认位置检查 SSH 密钥。

要使用主动加载到本机 SSH 密钥代理中的 SSH 密钥,请执行以下操作:

  • 在包含设备代理配置的 pillar 文件中,必须定义 username 参数。

要使用默认位置且没有密码保护的 SSH 密钥,请执行以下操作:

  • 在包含设备代理配置的 pillar 文件中,仅当参数不默认为密钥用于向设备进行身份验证的用户时,才需要提供 username 参数。

要使用不在默认位置或使用密码保护的 SSH 密钥,请执行以下操作:

  • 在包含设备代理配置的 pillar 文件中,将参数设置为 ssh_private_key_file 代理工作节点服务器上 SSH 私钥的路径,并将参数设置为 password SSH 密钥文件密码(如果密钥受密码保护)。

    注意:

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