Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

如何为 Junos OS 安装 Salt

您可以使用 Salt 版本 3001 (Sodium) 或更高版本来管理运行 Junos OS 的设备。Salt 主节点可以通过 Salt 代理工作节点管理运行 Junos OS 的设备,该工作节点可以在 Salt 主节点或单独的服务器上运行。每个受管设备必须有一个代理工作节点,每个代理工作节点大约需要 40 MB 到 100 MB 的 RAM。

一般安装过程为:

  1. 在运行 Junos OS 的每台设备上:

    • 通过 SSH 启用 NETCONF。

    • 配置 Salt 将用于连接到设备的用户帐户和身份验证方法。

  2. 在 Salt 主节点上:

    • 安装 Salt 及其依赖项。

    • 定义每个受管设备的代理配置。

    • 启动主盐过程。

  3. 在每个 Junos 代理工作节点服务器上:

    • 安装 Junos PyEZ 和 Python jxmlease yamlordereddictloader 模块。

    • 安装 Salt 及其依赖项(如果服务器独立于 Salt 主服务器)。

    • 为每个受管设备启动 Junos 代理工作节点进程。

  4. 在 Salt 主服务器上,接受每个 Junos 代理工作节点的密钥。

  5. (可选)启用 Junos 系统日志引擎(适用于 Salt)。

以下各节提供了运行 Ubuntu 18.04 的服务器的安装过程的每个部分的详细信息。如果您运行的是其他操作系统,请使用适用于您的操作系统的命令。我们建议使用 Python 3。

配置运行 Junos OS 的设备

Junos 代理工作节点使用 SSH 协议和标准 SSH 身份验证机制访问运行 Junos OS 的设备上的 NETCONF 服务器。要与运行 Junos OS 的设备建立 SSHv2 连接,必须确保满足以下要求:

  • 在将建立 NETCONF 会话的每台设备上都启用了基于 SSH 的 NETCONF 服务。

  • 客户端应用程序有一个用户帐户,可以登录到将在其中建立 NETCONF 会话的每个设备。

  • 客户端应用程序使用的登录帐户配置了 SSH 公钥/私钥对或基于文本的密码。

  • 客户端应用程序可以访问公钥/私钥或基于文本的密码。

如果使用 SSH 密钥向运行 Junos OS 的设备进行身份验证,但密钥尚不存在,请在代理工作节点服务器上为所需用户生成公有和私有 SSH 密钥对,并提供任何必需或所需的选项,例如:

要配置运行 Junos OS 的设备,请执行以下操作:

  1. 配置 NETCONF-over-SSH 服务。
  2. 配置 Salt 将用于连接到设备的用户帐户和身份验证方法。例如:
  3. 提交配置。
  4. 通过使用配置的用户名和身份验证方法从代理工作节点服务器登录到设备,验证密码或 SSH 密钥是否有效。
  5. 对每个运行 Junos OS 的受管设备重复此过程。

有关在运行 Junos OS 的设备上启用 NETCONF 并满足建立 SSH 会话要求的信息,请参阅 NETCONF XML 管理协议开发人员指南

设置 Salt 主节点

Salt 主节点是管理一个或多个节点或工作节点的主控制服务器。SaltStack 建议在专用管理服务器或虚拟机 (VM) 上安装 Salt 主节点。必须安装 Salt 3001 (Sodium) 或更高版本才能管理运行 Junos OS 的设备。

要安装和配置 Salt 主节点,请执行以下操作:

  1. 在 Salt 主服务器上安装 Salt 依赖项和 Salt 主服务器。

    要安装 Salt 主节点,请手动安装平台的软件包和依赖项,或者运行 Salt 引导脚本。

    例如,要使用引导脚本为 Salt 主节点安装 Python 3 软件包,请发出以下命令:

  2. 为您的环境自定义 Salt 主配置文件,该文件通常位于 / etc/salt/master 中。
    注意:

    有关定制 Salt 主配置文件的详细信息,请参阅 https://docs.saltstack.com/en/latest/ref/configuration/master.html

  3. 按照 Salt 主配置文件中的定义创建必要的目录结构。
  4. 通过为每个受管设备创建一个 pillar 文件来定义代理配置,该文件指定 proxytype: junos运行 Junos OS 的相应受管设备的主机名或 IP 地址,以及该设备的相应连接和身份验证参数。

    有关代理配置的详细信息,请参阅 salt.proxy.junos

    注意:

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

  5. 创建 pillar top 文件,并为每个受管设备定义代理工作节点名称,并将其映射到包含该设备代理配置的 pillar 文件。

    在以下示例中,标识为“router1”的 Junos 代理工作节点映射到 router1-proxy.sls 文件。

  6. 启动 salt 主进程(如果尚未运行)。
    注意:

    要在调试模式下启动该过程以进行故障排除,请使用 sudo salt-master -l debug

设置 Junos 代理工作节点服务器

您必须在管理运行 Junos OS 设备的代理工作节点服务器上安装以下软件:

  • 盐软件

  • 瞻博网络的 Junos PyEZ

  • jxmleaseyamlordereddictloader Python 模块

Junos 代理工作节点使用 Junos PyEZ 库连接到设备的 NETCONF 服务器并执行管理任务。

注意:

如果在同一台服务器上运行 Salt 主节点和 Junos 代理工作节点,则本节中的工作节点主机名将与上一节中的 Salt 主节点主机名相同。

要在 Salt 主服务器或单独的服务器上设置 Junos 代理工作节点,请执行以下操作:

  1. 安装 Python 包管理器,与 Salt 使用的 Python 版本相同。
  2. 在 Salt 使用的相同 Python 版本下安装 Junos PyEZ (junos-eznc)。

    有关特定于平台的要求、必备软件和安装说明,请参阅:

  3. jxmlease Salt 使用的相同 Python 版本下安装 和 yamlordereddictloader Python 模块。
  4. 如果代理工作节点服务器独立于 Salt 主服务器,请在服务器上安装 Salt 及其依赖项。

    要安装 Salt,请手动安装平台的软件包和依赖项,或者运行 Salt 引导脚本。

    例如,要使用引导脚本安装 Python 3 软件包,请发出以下命令:

  5. 使用 Salt 主节点的主机名或 IP 地址配置 /etc/salt/proxy 文件中的参数,使代理工作节点进程能够找到 Salt 主节点。master

    如果 salt-master 和代理工作节点进程在同一台服务器上运行,则可以改为指定 localhost

  6. 为运行 Junos OS 的每台设备启动 Junos 代理工作节点进程,并包含 -d 将其作为守护程序运行的选项。

    代理 ID 应与 Salt 主服务器上的 pillar top 文件中定义的代理 ID 相同。

    注意:

    如果在启动代理进程时遇到 AttributeError: 'module' object has no attribute 'SSL_ST_INIT' 错误,则可能需要更新平台上的 OpenSSL 软件包。

    注意:

    要在调试模式下启动该过程以进行故障排除,请使用 sudo salt-proxy --proxyid=router1 -l debug

代理工作节点连接到 Salt 主节点并发送其公钥。Salt 主节点必须先接受密钥,然后 Salt 主节点和代理工作节点才能进行通信。

授权 Salt 主节点上的代理工作节点密钥

Salt 使用公钥通过 Salt 主进程进行身份验证。默认情况下,Salt 主节点不授权任何工作节点或代理工作节点密钥。您必须先接受密钥,然后才能管理相应的设备。

您可以手动接受密钥,如本节所述。或者,如果您知道传入密钥不会构成安全威胁(例如,如果 salt 主进程和 salt 代理进程在同一服务器上运行),则可以在 Salt master 配置文件中包含该 auto_accept: True 选项以自动接受所有传入密钥。出于安全考虑,默认情况下禁用此选项。

要列出并接受挂起的密钥,请执行以下操作:

  1. 查看代理工作节点的公钥状态。
  2. 接受每个 Junos 代理工作节点的密钥。
    提示:

    使用该选项接受 -A 所有挂起的键,例如 sudo salt-key -A

验证与受管设备的连接

接受 Salt 主节点上的密钥后,调用 test.ping 执行函数以通过消息总线对代理工作节点执行 ping 操作,并验证工作节点是否已启动并正在进行通信。您可以指定目标工作节点或用于 '*' ping 所有工作节点。

以下示例对运行 Junos OS 且与 Junos 代理工作节点路由器 1 关联的设备执行 ping 操作。

以下示例对 Salt 主服务器管理的所有工作节点执行 ping 操作:

以下示例使用该 junos.cli 函数在运行 Junos OS 的指定设备上发出 show version 命令:

注意:

如果遇到错误'junos' __virtual__ returned False: The junos or dependent module could not be loaded: junos-eznc or jxmlease or yamlordereddictloader or proxy could not be loaded,Junos 代理工作节点服务器可能未安装 Junos PyEZ 或 或jxmleaseyamlordereddictloader模块,或者 Junos 代理工作节点进程可能未运行或无法向设备进行身份验证。

(可选)配置 Junos 系统日志引擎

Junos 系统日志引擎(适用于 Salt)可用于对运行 Junos OS 的设备进行基于事件的状态管理。启用 Junos 系统日志引擎时,它会侦听系统日志事件,提取事件信息,将其转换为 Salt 格式,然后将其发布到 Salt 事件总线上。要启用 Junos 系统日志引擎,必须在 Salt 主服务器上配置 Junos 系统日志引擎,并且还必须将运行 Junos OS 的设备配置为将系统日志事件发送到 Salt 服务器上配置的端口。

注意:

Junos 系统日志引擎也可以在代理工作节点服务器上运行。

要在 Salt 主服务器上启用 Junos 系统日志引擎,请执行以下操作:

  1. 安装 Python 包管理器,与 Salt 使用的 Python 版本相同。
  2. pyparsing为 Salt 使用的相同 Python 版本安装 和 twisted Python 模块。
  3. Salt 主配置文件中的部分下engines配置 Junos 系统日志引擎,并配置引擎侦听事件的端口。
  4. (可选)配置参数以 topic 指定将事件发布到事件总线时,事件主题标题后面显示 jnpr/syslog/ 的字段。
  5. (可选)配置参数以 daemon 指示引擎仅订阅和发布由特定 Junos OS 进程生成的事件。
  6. 重新启动 Salt 主进程以应用新配置。

要将运行 Junos OS 的设备配置为将系统日志事件发送到运行 Junos 系统日志引擎的主机:

  1. 配置 Junos 系统日志引擎所在的服务器的主机名或 IP 地址,并配置其侦听的端口。

  2. 配置要发送的事件类型。

    • 要发送所有事件,请配置为 any any 指示所有设施和所有消息严重性级别。

    • 要仅发送特定事件,请配置要捕获的事件的设施和消息严重性级别,例如:

  3. 提交配置。