← 回到技术随笔
· 8751 字

H3C交换机SSH远程登录与ACL限制配置实例

以 H3C S5570S 和 Comware V7 为例,配置非默认端口的 SSH 登录,并用 IPv4/IPv6 ACL 只允许运维电脑访问。

本文以 H3C S5570S 系列和 Comware V7 为主要示例,只适用于本人拥有或已经明确授权管理的交换机。文中的地址、账号、端口和 ACL 编号都是示例,使用时要换成现场实际规划。

一、现场场景

交换机完成管理地址和基础网络配置后,我需要让运维电脑通过 SSH 远程登录。我所在公司对安全性要求比较高,不允许使用默认的 22 端口,并通过 ACL 只放行指定的 IPv4 和 IPv6 管理地址,如果客户没有相应要求可使用默认配置。

本次使用下面的示例:

项目 示例值
交换机 HQ-Access-01
管理 VLAN 100
交换机 IPv4 192.168.100.2
交换机 IPv6 2001:db8:100::2
运维电脑 IPv4 192.168.100.10
运维电脑 IPv6 2001:db8:100::10
SSH 端口 22222
SSH 用户名 netops_hq01
IPv4 ACL 2000
IPv6 ACL 2001

示例中的 IP 地址不能直接用于生产网络,22222 也要换成公司批准且没有被占用的端口。

二、配置目标

  1. 创建一个专门用于 SSH 登录的管理账号;
  2. 把 SSH 端口改为公司批准的非默认端口;
  3. 只允许指定运维电脑通过 IPv4 或 IPv6 登录;
  4. VTY 只接受 SSH,不再接受 Telnet;
  5. 分别验证允许地址、未允许地址和端口限制。

三、配置前先检查

如果我当前就是通过 SSH 操作,不能直接修改端口或访问限制。H3C 官方说明中明确提到,SSH 服务已经开启时修改端口会重启 SSH 服务,并断开现有 SSH 会话。因此这一步应从 Console 操作,至少也要保证现场有人可以通过 Console 恢复。

先查看现有 SSH、账号、VTY 和 ACL 配置:

# 查看型号和 Comware 版本,确认本文命令是否适用。
<HQ-Access-01> display version

# 查看 SSH 服务是否已经开启、当前监听端口等状态。
<HQ-Access-01> display ssh server status

# 查看现有管理账号,避免覆盖同名用户。
<HQ-Access-01> display local-user

# 查看第一个 VTY 的认证方式和允许协议。
<HQ-Access-01> display line vty 0

# 查看现有 IPv4 和 IPv6 ACL,确认 2000、2001 没有被占用。
<HQ-Access-01> display acl all
<HQ-Access-01> display acl ipv6 all

还要从交换机测试运维电脑的管理地址是否可达:

# 测试运维电脑的 IPv4 地址。
<HQ-Access-01> ping 192.168.100.10

# 测试运维电脑的 IPv6 地址。
<HQ-Access-01> ping ipv6 2001:db8:100::10

Ping 不通不一定就是故障,电脑防火墙也可能禁止 Ping。但在继续配置前,至少要确认管理 VLAN、网关、路由和电脑地址与审批记录一致。

如果交换机已经接入 RADIUS 或 HWTACACS,不能直接照搬下面的本地账号配置,应先确认现有 AAA 认证方式。本文示例使用交换机本地账号。

四、创建 SSH 管理账号

<HQ-Access-01> system-view

# 创建本地管理用户。用户名要换成现场批准的个人账号或运维账号。
[HQ-Access-01] local-user netops_hq01 class manage

# 设置登录密码。下面只是占位文字,输入前必须换成公司要求的强密码。
[HQ-Access-01-luser-manage-netops_hq01] password simple StrongPassword_Replace_Before_Input

# 只允许这个账号使用 SSH 服务。
[HQ-Access-01-luser-manage-netops_hq01] service-type ssh

# 授予完整网络管理权限。若账号只用于查看,应按现场权限要求降低角色。
[HQ-Access-01-luser-manage-netops_hq01] authorization-attribute user-role network-admin
[HQ-Access-01-luser-manage-netops_hq01] quit
[HQ-Access-01] return

password simple 后面的内容可能在输入时显示出来,不要在旁边有人观看或终端被录屏时输入。保存后的配置会以加密形式显示,但占位密码本身不能拿来使用。

五、配置 SSH 服务和 VTY

先检查设备是否已有本地公钥:

<HQ-Access-01> display public-key local public

如果能看到已有 RSA 公钥,不要重复生成,否则客户端可能提示交换机的主机密钥发生变化。只有确认没有本地密钥时,才执行下面的命令,并按照设备提示选择符合公司要求的密钥长度:

<HQ-Access-01> system-view

# 仅在设备没有 RSA 本地密钥时执行。
[HQ-Access-01] public-key local create rsa

接着配置 VTY 和 SSH 服务:

# 进入所有 VTY 线路。
[HQ-Access-01] line vty 0 63

# 使用本地账号或现有 AAA 方案认证。
[HQ-Access-01-line-vty0-63] authentication-mode scheme

# VTY 只允许 SSH,禁止通过 Telnet 登录。
[HQ-Access-01-line-vty0-63] protocol inbound ssh
[HQ-Access-01-line-vty0-63] quit

# 把 SSH 服务端口设置为批准的 22222。
[HQ-Access-01] ssh server port 22222

# 开启 SSH 服务。
[HQ-Access-01] ssh server enable

# 如果设备原来开启了 Telnet,关闭 Telnet 服务。
[HQ-Access-01] undo telnet server enable
[HQ-Access-01] return

若 SSH 原来已经在使用,修改端口、账号、ACL 和 VTY 前要先记录原配置,并从 Console 操作。不要在唯一一条远程会话中直接执行这组命令。

六、增加 IPv4 和 IPv6 ACL 限制

SSH 配置完成后,再增加访问限制。ACL 写错可能造成远程登录失败,因此下面的操作仍然从 Console 完成。

<HQ-Access-01> system-view

# 创建 IPv4 基本 ACL 2000。
[HQ-Access-01] acl basic 2000

# 写清用途,避免以后不知道这条 ACL 控制什么服务。
[HQ-Access-01-acl-ipv4-basic-2000] description Permit_IPv4_SSH_Admin

# 只允许运维电脑 192.168.100.10 访问。
# 末尾的 0 表示只匹配这一个 IPv4 地址。
[HQ-Access-01-acl-ipv4-basic-2000] rule 5 permit source 192.168.100.10 0

# 明确拒绝其他 IPv4 来源。
[HQ-Access-01-acl-ipv4-basic-2000] rule 100 deny source any
[HQ-Access-01-acl-ipv4-basic-2000] quit

# 创建 IPv6 基本 ACL 2001。
[HQ-Access-01] acl ipv6 basic 2001
[HQ-Access-01-acl-ipv6-basic-2001] description Permit_IPv6_SSH_Admin

# 只允许运维电脑 2001:db8:100::10 访问。
# 末尾的 128 表示完整匹配这一个 IPv6 地址。
[HQ-Access-01-acl-ipv6-basic-2001] rule 5 permit source 2001:db8:100::10 128

# 明确拒绝其他 IPv6 来源。
[HQ-Access-01-acl-ipv6-basic-2001] rule 100 deny source any
[HQ-Access-01-acl-ipv6-basic-2001] quit
[HQ-Access-01] return

先检查两组规则,重点核对地址和动作是 permit 还是 deny

<HQ-Access-01> display acl 2000
<HQ-Access-01> display acl ipv6 2001

确认规则正确后,再把它们应用到 SSH:

<HQ-Access-01> system-view

# IPv4 SSH 连接必须通过 ACL 2000。
[HQ-Access-01] ssh server acl 2000

# IPv6 SSH 连接必须通过 IPv6 ACL 2001。
[HQ-Access-01] ssh server ipv6 acl ipv6 2001

# 记录被 ACL 拒绝的 SSH 连接,方便排查登录失败和异常扫描。
[HQ-Access-01] ssh server acl-deny-log enable
[HQ-Access-01] return

如果有多台运维电脑,就在拒绝规则前继续增加允许规则,不能把整个办公网段都放进去图省事。ACL 应在 SSH 基础配置后立即完成并验证,不要让没有来源限制的 SSH 长期开放。

七、Comware V5 配置

Comware V5 使用 user-interface vty,本地用户权限也使用级别表示。下面是本文参考的 V5 SSH 配置:

<HQ-Access-01> system-view

# 生成 RSA 本地密钥;已有密钥时不要重复生成。
[HQ-Access-01] public-key local create rsa

# 创建本地 SSH 用户。
[HQ-Access-01] local-user netops_hq01
[HQ-Access-01-luser-netops_hq01] password simple StrongPassword_Replace_Before_Input
[HQ-Access-01-luser-netops_hq01] service-type ssh

# V5 的 3 级权限相当于管理权限,实际使用时按公司要求授权。
[HQ-Access-01-luser-netops_hq01] authorization-attribute level 3
[HQ-Access-01-luser-netops_hq01] quit

# 明确指定该 SSH 用户使用 Stelnet 和密码认证。
[HQ-Access-01] ssh user netops_hq01 service-type stelnet authentication-type password

# V5 使用 user-interface 进入 VTY,线路数量以设备实际支持为准。
[HQ-Access-01] user-interface vty 0 15
[HQ-Access-01-ui-vty0-15] authentication-mode scheme
[HQ-Access-01-ui-vty0-15] protocol inbound ssh
[HQ-Access-01-ui-vty0-15] quit

# 开启 SSH 服务。
[HQ-Access-01] ssh server enable
[HQ-Access-01] return

V5 的 IPv4 ACL 写法为 acl number 2000,例如:

<HQ-Access-01> system-view

# 创建 IPv4 基本 ACL。
[HQ-Access-01] acl number 2000 match-order config
[HQ-Access-01-acl-basic-2000] rule 5 permit source 192.168.100.10 0
[HQ-Access-01-acl-basic-2000] rule 100 deny source any
[HQ-Access-01-acl-basic-2000] quit

# ACL 检查无误后,在 VTY 下调用它,限制哪些 IPv4 地址可以登录。
[HQ-Access-01] user-interface vty 0 15
[HQ-Access-01-ui-vty0-15] acl 2000 inbound
[HQ-Access-01-ui-vty0-15] quit
[HQ-Access-01] return

本文参考的 Comware V5 配置没有与 V7 示例相同的 ssh server ipv6 acl 写法,VTY 下的示例也只限制 IPv4。双栈管理网络不能把这段 V5 配置当成完整的 IPv4/IPv6 访问限制;需要根据具体型号的软件手册确认 IPv6 登录控制能力,不支持时就不要开放 IPv6 SSH。

不同 V5 型号支持的 VTY 数量和非默认 SSH 端口能力可能不同,因此本文没有把 V7 的 ssh server port 22222 直接套到 V5。若设备手册没有该命令,就只能继续使用 22 端口,并依靠 ACL、强密码和管理网隔离控制访问。

八、登录和限制验证

先从允许访问的运维电脑测试 IPv4:

# -p 后面填写交换机实际配置的 SSH 端口。
ssh -p 22222 netops_hq01@192.168.100.2

再测试 IPv6:

# OpenSSH 可以直接使用 IPv6 地址作为目标。
ssh -p 22222 netops_hq01@2001:db8:100::2

第一次连接时,客户端会显示交换机主机密钥指纹。要与现场记录核对后再接受,不能看到提示就直接输入 yes

登录成功后,在交换机上检查状态:

# 查看 SSH 服务状态和实际端口。
<HQ-Access-01> display ssh server status

# 查看当前 SSH 会话。
<HQ-Access-01> display ssh server session

# 查看账号允许的服务和角色。
<HQ-Access-01> display local-user user-name netops_hq01 class manage

# 查看两组 ACL 及规则匹配次数。
<HQ-Access-01> display acl 2000
<HQ-Access-01> display acl ipv6 2001

最后要完成四组测试:

  1. 允许的 IPv4 地址连接 22222,应能登录;
  2. 允许的 IPv6 地址连接 22222,应能登录;
  3. 未被 ACL 允许的电脑连接 22222,应被拒绝或超时;
  4. 连接默认的 22 端口,应无法建立 SSH 会话。

只有允许和拒绝两边都测过,才能确认 ACL 真正生效。全部验证正常后再保存:

# 保存前再次确认没有误改其他配置。
<HQ-Access-01> display current-configuration

# 保存当前配置。
<HQ-Access-01> save force

九、常见问题

1. 配好后所有人都无法登录

先通过 Console 查看 ACL 中允许的地址是否写错,尤其要确认运维电脑实际从哪个地址发起连接。跨网段管理时,交换机看到的来源地址可能与电脑网卡上显示的地址不同。

2. IPv4 可以登录,IPv6 不行

检查交换机和电脑是否都有正确的 IPv6 地址、网关和路由,再检查 ssh server ipv6 acl ipv6 2001 是否已经应用。不能只建 IPv6 ACL,却忘了把它交给 SSH 服务使用。

3. 用户名和密码正确,仍提示认证失败

检查本地用户是否配置了 service-type ssh,VTY 是否使用 authentication-mode scheme,以及账号是否被现有 AAA 域接管。

4. 客户端提示主机密钥发生变化

先确认交换机是否更换、恢复配置或重新生成过本地密钥。不能为了消除提示直接删除客户端记录,否则可能忽略连接到了错误设备的风险。

5. 改完端口后当前 SSH 会话断开

这是修改 SSH 服务端口时可能发生的正常现象。应该从 Console 修改,并使用新端口重新连接;如果新端口不通,再从 Console 恢复原配置。

十、回退方法

回退应以变更前保存的配置为准。已有 SSH 服务的交换机,要恢复原端口、原 ACL 和原账号,不能一律恢复成 22 端口。

如果本文配置是在原本没有 SSH 的新设备上增加的,可以从 Console 关闭新服务并删除新建内容:

<HQ-Access-01> system-view

# 先关闭新开启的 SSH 服务。
[HQ-Access-01] undo ssh server enable

# 取消 SSH 服务调用的 IPv4 和 IPv6 ACL。
[HQ-Access-01] undo ssh server acl
[HQ-Access-01] undo ssh server ipv6 acl

# 关闭 ACL 拒绝日志。
[HQ-Access-01] undo ssh server acl-deny-log enable

# 恢复 SSH 默认端口。已有服务时应恢复变更前记录的端口。
[HQ-Access-01] undo ssh server port

# 删除本文新建的本地账号。
[HQ-Access-01] undo local-user netops_hq01 class manage

# 删除本文新建且未被其他服务使用的 ACL。
[HQ-Access-01] undo acl basic 2000
[HQ-Access-01] undo acl ipv6 basic 2001
[HQ-Access-01] return

不要随意删除 RSA 本地密钥,它可能还被其他 SSH、SFTP 或 NETCONF 配置使用。VTY 也应恢复成变更前记录的配置,而不是为了回退重新允许 Telnet。

十一、小结

SSH 能登录只是第一步,真正适合日常运维的配置还要限制来源地址、关闭 Telnet,并分别验证 IPv4、IPv6、允许地址和未允许地址。

我通常先把账号、VTY 和 SSH 服务配置好,再增加 IPv4/IPv6 ACL 限制。修改过程中始终保留 Console 回退入口,验证通过后才保存配置。

十二、完整配置汇总

下面汇总本文 Comware V7 示例。执行前必须替换地址、账号、密码、端口和 ACL 编号,并确认设备没有同名账号或同号 ACL。

<HQ-Access-01> system-view

# 创建仅用于 SSH 的本地管理账号。
[HQ-Access-01] local-user netops_hq01 class manage
[HQ-Access-01-luser-manage-netops_hq01] password simple StrongPassword_Replace_Before_Input
[HQ-Access-01-luser-manage-netops_hq01] service-type ssh
[HQ-Access-01-luser-manage-netops_hq01] authorization-attribute user-role network-admin
[HQ-Access-01-luser-manage-netops_hq01] quit

# 如果 display public-key local public 已经能看到 RSA 密钥,跳过下一条。
[HQ-Access-01] public-key local create rsa

# VTY 使用账号认证,并且只接受 SSH。
[HQ-Access-01] line vty 0 63
[HQ-Access-01-line-vty0-63] authentication-mode scheme
[HQ-Access-01-line-vty0-63] protocol inbound ssh
[HQ-Access-01-line-vty0-63] quit

# 设置 SSH 端口并开启服务。
[HQ-Access-01] ssh server port 22222
[HQ-Access-01] ssh server enable

# IPv4 SSH 来源限制:只允许 192.168.100.10。
[HQ-Access-01] acl basic 2000
[HQ-Access-01-acl-ipv4-basic-2000] description Permit_IPv4_SSH_Admin
[HQ-Access-01-acl-ipv4-basic-2000] rule 5 permit source 192.168.100.10 0
[HQ-Access-01-acl-ipv4-basic-2000] rule 100 deny source any
[HQ-Access-01-acl-ipv4-basic-2000] quit

# IPv6 SSH 来源限制:只允许 2001:db8:100::10。
[HQ-Access-01] acl ipv6 basic 2001
[HQ-Access-01-acl-ipv6-basic-2001] description Permit_IPv6_SSH_Admin
[HQ-Access-01-acl-ipv6-basic-2001] rule 5 permit source 2001:db8:100::10 128
[HQ-Access-01-acl-ipv6-basic-2001] rule 100 deny source any
[HQ-Access-01-acl-ipv6-basic-2001] quit

# ACL 检查无误后,再应用到 SSH 并记录拒绝日志。
[HQ-Access-01] ssh server acl 2000
[HQ-Access-01] ssh server ipv6 acl ipv6 2001
[HQ-Access-01] ssh server acl-deny-log enable

# 关闭明文 Telnet 服务。
[HQ-Access-01] undo telnet server enable
[HQ-Access-01] return

# 验证通过后保存。
<HQ-Access-01> save force

参考资料