为 NETCONF 会话建立 SSH 连接
为 NETCONF 会话建立 SSH 连接
您可以使用 SSH 协议在 配置管理服务器 和 Junos 设备之间建立连接。您可以使用配置管理服务器远程配置 Junos 设备。
您可以使用以下选项在配置管理服务器和 Junos 设备之间建立 SSH 连接。
-
SSH — 配置管理服务器启动与 Junos 设备的 SSH 会话。
-
出站 SSH - 当配置管理服务器由于网络限制(如防火墙)而无法启动 SSH 连接时,请使用此选项。在这种情况下,您可以将 Junos 设备配置为启动、建立和维护与一组预定义的配置管理服务器的 SSH 连接。
为 NETCONF 会话建立 SSH 连接的先决条件
在配置管理服务器与 Junos 设备建立 SSH 连接之前,您必须满足以下各节中讨论的要求。
- 在配置管理服务器上安装 SSH 软件
- 通过 SSH 启用 NETCONF 服务
- 为 Junos 设备上的客户端应用程序配置用户帐户
- 为 Junos OS 用户帐户配置公钥/私钥对或密码
- 使用客户端应用程序访问密钥或密码
在配置管理服务器上安装 SSH 软件
配置管理服务器处理与 Junos 设备的 SSH 连接。因此,必须在配置管理服务器上本地安装 SSH 软件。有关获取和安装 SSH 软件的信息,请参阅 http://www.ssh.com 和 http://www.openssh.com。
通过 SSH 启用 NETCONF 服务
要在 Junos 设备上建立 NETCONF 会话,必须启用 NETCONF 服务。您可以将 NETCONF 服务器配置为接受以下端口上的 NETCONF 会话:
-
默认 NETCONF 端口 (830) 或用户定义的端口
-
默认 SSH 端口 (22)
我们建议您使用默认的 NETCONF 端口,因为它使设备能够轻松识别和过滤 NETCONF 流量。或者,您可以将设备配置为接受特定端口上的 NETCONF 会话,而不是默认 NETCONF 端口。定义的端口仅接受 NETCONF-over-SSH 会话,并拒绝常规 SSH 会话请求。如果还在服务器上启用 SSH 服务,设备将同时接受默认 SSH 端口和配置的 NETCONF 端口(默认或用户定义端口)上的 NETCONF 会话。为了提高安全性,您可以配置事件策略,这些策略利用 UI_LOGIN_EVENT
信息来有效地禁用默认端口或进一步限制端口上的 NETCONF 服务器访问。
要在 Junos 设备上通过 SSH 启用 NETCONF 服务,请执行以下操作:
-
在默认 NETCONF 端口 (830) 或用户定义的端口上启用 NETCONF 服务:
-
要使用默认的 NETCONF 端口 (830),请在层次结构级别包含
netconf ssh
以下语句[edit system services]
:[edit system services] user@host# set netconf ssh
-
要使用特定端口,请在
port
[edit system services netconf ssh
] 层次结构级别使用所需的端口号配置语句。[edit system services] user@host# set netconf ssh port port-number
port-number
范围从 1 到 65535。配置的端口仅接受 NETCONF-over-SSH 会话,并拒绝常规 SSH 会话请求。注意:尽管可以在 1 到 65535 之间的任何端口上配置 NETCONF-over-SSH 会话,但应避免在通常为其他服务分配的端口上配置访问权限。这种做法可避免潜在的资源冲突。如果配置了为其他服务(如 FTP)分配的端口,并且启用了该服务,则 不会
commit check
显示资源冲突或发出任何警告消息。
-
-
(可选)要同时使用默认 SSH 端口 (22) 启用对 NETCONF SSH 子系统的访问,请在层次结构级别包含
ssh
该语句[edit system services]
。[edit system services] user@host# set ssh
此配置允许所有用户和应用程序对设备进行 SSH 访问。
注意:在默认行为是限制根用户使用 SSH 服务的版本中,您必须在
[edit system services ssh]
层次结构级别配置root-login allow
语句,以使根用户能够通过 SSH 打开 NETCONF 会话。 (可选)将设备配置为断开无响应的 NETCONF 客户端的连接。
指定超时间隔(以秒为单位),在此间隔之后,如果未从客户端收到任何数据,则 sshd 进程将请求响应。此外,指定触发断开连接的错过客户端活动响应的阈值。
[edit system services] user@host# set netconf ssh client-alive-interval 10 user@host# set netconf ssh client-alive-count-max 10
注意:在层次结构级别配置
[edit system services netconf ssh]
的语句仅适用于通过默认端口 (830) 或通过在同一层次结构级别配置的用户定义端口连接的 NETCONF 会话。-
提交配置:
[edit] user@host# commit
-
在客户端应用程序建立 NETCONF 会话的每台运行 Junos OS 的设备上重复上述步骤。
为 Junos 设备上的客户端应用程序配置用户帐户
配置管理服务器必须登录到 Junos 设备才能建立 NETCONF 会话。因此,配置管理服务器在其建立 NETCONF 会话的每台设备上都需要一个用户帐户。以下说明说明如何在 Junos 设备上创建本地用户帐户。或者,您可以跳过此部分,通过 RADIUS 或 TACACS+ 启用身份验证。
要创建本地用户帐户,请执行以下操作:
为 Junos OS 用户帐户配置公钥/私钥对或密码
配置管理服务器需要 SSH 公钥/私钥对和/或基于文本的密码,然后才能向 NETCONF 服务器进行身份验证。如果帐户仅用于通过 SSH 连接到 NETCONF 服务器,则公钥/私钥对就足够了。如果该帐户还用于以其他方式访问设备(例如,用于在控制台上登录),则必须具有基于文本的密码。如果配置了基于密钥的身份验证但失败,也会使用密码(SSH 服务器提示输入密码)。
如果您选择通过 RADIUS 或 TACACS+ 启用身份验证,则可以跳过此部分。
要创建基于文本的密码:
要创建SSH公钥/私钥对,请执行以下步骤:
在运行客户端应用程序的配置管理服务器上,在标准命令外壳中发出
ssh-keygen
命令并提供相应的参数。% ssh-keygen options
有关
ssh-keygen
选项的详细信息,请参阅该ssh-keygen
命令的手册页。将公钥与 Junos OS 登录帐户关联。
[edit system login user username authentication] user@host# set load-key-file URL
Junos OS 将指定文件的内容复制到运行 Junos OS 的设备上。 URL 是包含一个或多个公钥的文件的路径。默认情况下,该
ssh-keygen
命令将每个公钥存储在用户主目录的 .ssh 子目录中的文件中;文件名取决于编码和 SSH 版本。有关指定 URL 的信息,请参阅 CLI 用户指南。注意:或者,您可以在层次结构级别包含
ssh-rsa
[edit system login user account-name authentication]
语句。但是,我们建议使用该load-key-file
语句,因为它消除了在命令行上键入或剪切粘贴公钥的需要。提交配置。
[edit] user@host# commit
使用客户端应用程序访问密钥或密码
客户端应用程序必须能够访问配置的公钥/私钥或密码,并在 NETCONF 服务器提示输入时提供。
有几种方法可以使应用程序访问密钥或密码:
如果使用公钥/私钥,则 ssh-agent 程序将在运行客户端应用程序的设备上运行,并处理私钥。
当用户启动应用程序时,应用程序会提示用户输入密码,并以安全的方式临时存储密码。
密码以加密形式存储在安全的本地磁盘位置或安全的数据库中。
为 NETCONF 会话建立出站 SSH 连接的先决条件
若要使配置管理服务器能够与 NETCONF 服务器建立出站 SSH 连接,必须满足以下各节中讨论的要求:
在客户端上安装 SSH 软件
设备与配置管理服务器建立 SSH 连接后,配置管理服务器将控制 SSH 会话。因此,必须在配置管理服务器上本地安装 SSH 客户端软件。有关获取和安装 SSH 软件的信息,请参阅 http://www.ssh.com/ 和 http://www.openssh.com/ 。
通过 SSH 启用 NETCONF 服务
要在 Junos 设备上建立 NETCONF 会话,必须启用 NETCONF 服务。您可以将 NETCONF 服务器配置为接受以下端口上的 NETCONF 会话:
-
默认 NETCONF 端口 (830) 或用户定义的端口
-
默认 SSH 端口 (22)
我们建议您使用默认的 NETCONF 端口,因为它使设备能够轻松识别和过滤 NETCONF 流量。或者,您可以将设备配置为接受特定端口上的 NETCONF 会话,而不是默认 NETCONF 端口。定义的端口仅接受 NETCONF-over-SSH 会话,并拒绝常规 SSH 会话请求。如果还在服务器上启用 SSH 服务,设备将同时接受默认 SSH 端口和配置的 NETCONF 端口(默认或用户定义端口)上的 NETCONF 会话。为了提高安全性,您可以配置事件策略,这些策略利用 UI_LOGIN_EVENT
信息来有效地禁用默认端口或进一步限制端口上的 NETCONF 服务器访问。
要在 Junos 设备上通过 SSH 启用 NETCONF 服务,请执行以下操作:
-
在默认 NETCONF 端口 (830) 或用户定义的端口上启用 NETCONF 服务:
-
要使用默认的 NETCONF 端口 (830),请在层次结构级别包含
netconf ssh
以下语句[edit system services]
:[edit system services] user@host# set netconf ssh
-
要使用特定端口,请在
port
[edit system services netconf ssh
] 层次结构级别使用所需的端口号配置语句。[edit system services] user@host# set netconf ssh port port-number
port-number
范围从 1 到 65535。配置的端口仅接受 NETCONF-over-SSH 会话,并拒绝常规 SSH 会话请求。注意:尽管可以在 1 到 65535 之间的任何端口上配置 NETCONF-over-SSH 会话,但应避免在通常为其他服务分配的端口上配置访问权限。这种做法可避免潜在的资源冲突。如果配置了为其他服务(如 FTP)分配的端口,并且启用了该服务,则 不会
commit check
显示资源冲突或发出任何警告消息。
-
-
(可选)要同时使用默认 SSH 端口 (22) 启用对 NETCONF SSH 子系统的访问,请在层次结构级别包含
ssh
该语句[edit system services]
。[edit system services] user@host# set ssh
此配置允许所有用户和应用程序对设备进行 SSH 访问。
注意:在默认行为是限制根用户使用 SSH 服务的版本中,您必须在
[edit system services ssh]
层次结构级别配置root-login allow
语句,以使根用户能够通过 SSH 打开 NETCONF 会话。 (可选)将设备配置为断开无响应的 NETCONF 客户端的连接。
指定超时间隔(以秒为单位),在此间隔之后,如果未从客户端收到任何数据,则 sshd 进程将请求响应。此外,指定触发断开连接的错过客户端活动响应的阈值。
[edit system services] user@host# set netconf ssh client-alive-interval 10 user@host# set netconf ssh client-alive-count-max 10
注意:在层次结构级别配置
[edit system services netconf ssh]
的语句仅适用于通过默认端口 (830) 或通过在同一层次结构级别配置的用户定义端口连接的 NETCONF 会话。-
提交配置:
[edit] user@host# commit
-
在客户端应用程序建立 NETCONF 会话的每台运行 Junos OS 的设备上重复上述步骤。
将 Junos 设备配置为出站 SSH
要将 Junos 设备配置为出站 SSH,请执行以下操作:
在客户端上接收和管理出站 SSH 启动序列
配置为出站 SSH 时,Junos 设备会尝试与配置管理服务器保持持续连接。如果未建立出站 SSH 会话,设备就会将出站 SSH 启动序列发送到设备配置管理服务器列表中列出的配置管理服务器。在与设备建立连接之前,必须将每个配置管理服务器设置为接收此启动序列,与设备建立 TCP 连接,并将设备标识传输回设备。
启动顺序采用以下两种形式之一,具体取决于您选择如何处理 Junos OS 服务器的公钥。
如果在配置管理服务器上手动安装公钥,则启动序列采用以下形式:
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: <device-id>\r\n
如果在初始化序列期间设备将公钥转发到配置管理服务器,则该序列采用以下形式:
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: : <device-id>\r\n HOST-KEY: <pub-host-key>\r\n HMAC: <HMAC(pub-SSH-host-key,<secret>)>\r\n
更改历史记录表
功能支持由您使用的平台和版本决定。使用功能资源管理器确定您的平台是否支持某个 功能 。