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 也要换成公司批准且没有被占用的端口。
二、配置目标
- 创建一个专门用于 SSH 登录的管理账号;
- 把 SSH 端口改为公司批准的非默认端口;
- 只允许指定运维电脑通过 IPv4 或 IPv6 登录;
- VTY 只接受 SSH,不再接受 Telnet;
- 分别验证允许地址、未允许地址和端口限制。
三、配置前先检查
如果我当前就是通过 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
最后要完成四组测试:
- 允许的 IPv4 地址连接
22222,应能登录; - 允许的 IPv6 地址连接
22222,应能登录; - 未被 ACL 允许的电脑连接
22222,应被拒绝或超时; - 连接默认的 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