第49篇:Telnet 与 SSH:远程管理的安全之选

关键词:Telnet、SSH、远程管理、加密、VRP、AAA认证、华为设备、安全管理


一、引言

网络工程师日常工作中,大部分时间是在远程管理设备。无论是配置修改、故障排查还是性能监控,都需要通过远程登录方式接入设备。Telnet 和 SSH 是最常用的两种远程管理协议,但它们在安全性上有着天壤之别。

Telnet 以明文传输所有数据(包括密码),而 SSH 对所有数据进行加密。在现代网络运维中,SSH 已成为远程管理的唯一推荐方案。本文将对比两种协议的特点,并详细讲解华为设备上的远程管理配置。

二、核心概念

2.1 Telnet 与 SSH 对比

对比维度 Telnet SSH
端口 23 22
传输层协议 TCP TCP
数据加密 无(明文) 有(端到端加密)
密码传输 明文 加密
认证方式 用户名/密码 密码、公钥、证书
完整性校验 无 有(防止篡改)
端口转发 不支持 支持(隧道)
资源消耗 低 较高(加解密)
推荐程度 不推荐 强烈推荐

2.2 SSH 加密机制

加密组件 作用 常用算法
对称加密 加密会话数据 AES-128/256、3DES、ChaCha20
非对称加密 密钥交换和身份认证 RSA、ECDSA、Ed25519
完整性校验 防止数据篡改 HMAC-SHA256、HMAC-SHA512
主机密钥 设备身份标识 RSA 2048/4096 位

2.3 AAA 认证框架

AAA(Authentication、Authorization、Accounting)是华为设备统一的认证、授权和计费框架,为 Telnet、SSH、HTTP 等管理协议提供统一的认证管理。

组件 说明
认证(Authentication) 验证用户身份(用户名/密码、RSA 公钥、HMAC 等)
授权(Authorization) 控制用户可以执行的操作(命令级别、协议类型)
计费(Accounting) 记录用户登录和操作日志

三、技术细节

3.1 SSH 服务器配置(华为设备)

# ===== 华为设备 SSH 服务器完整配置 =====

# Step 1: 配置设备域名(生成 RSA 密钥对需要)
[HUAWEI] sysname CORE-SW
[CORE-SW] dns name-server 114.114.114.114

# Step 2: 生成 RSA 密钥对
[CORE-SW] rsa local-key-pair create
# 提示选择密钥长度,推荐 2048 或 4096
Input the key number: [default: 2048]: 2048

# Step 3: 创建本地用户
[CORE-SW] aaa
[CORE-SW-aaa] local-user ssh_admin password cipher Huawei@123
[CORE-SW-aaa] local-user ssh_admin service-type ssh
[CORE-SW-aaa] local-user ssh_admin privilege level 15
[CORE-SW-aaa] local-user ssh_admin authorization-attribute user-role network-admin

# Step 4: 配置 SSH 服务器
[CORE-SW] ssh user ssh_admin authentication-type password
[CORE-SW] ssh user ssh_admin service-type all

# Step 5: 在 VTY 接口上启用 SSH
[CORE-SW] user-interface vty 0 4
[CORE-SW-ui-vty0-4] authentication-mode aaa
[CORE-SW-ui-vty0-4] protocol inbound ssh

# Step 6: 启用 SSH 服务
[CORE-SW] ssh server enable

# 验证
<CORE-SW> display ssh server status
 SSH Server Status: Running
 Protocol Version: SSHv2

<CORE-SW> display ssh user
 Username       Auth-Type    Service-Type    Login-Flag
 ssh_admin      password     all             Not Login

3.2 Telnet 配置(仅用于特殊场景)

# ===== Telnet 配置(不推荐生产环境使用)=====

# Step 1: 创建本地用户
[HUAWEI] aaa
[HUAWEI-aaa] local-user telnet_user password cipher Huawei@123
[HUAWEI-aaa] local-user telnet_user service-type telnet
[HUAWEI-aaa] local-user telnet_user privilege level 3

# Step 2: 在 VTY 接口上启用 Telnet
[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] authentication-mode aaa
[HUAWEI-ui-vty0-4] protocol inbound telnet

# 验证
<HUAWEI> display user-interface

3.3 同时配置 SSH 和 Telnet(过渡期)

# 在实际运维中,可能需要同时支持 SSH 和 Telnet(如某些老旧终端只支持 Telnet)

[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] authentication-mode aaa
# 同时允许 SSH 和 Telnet 登录
[HUAWEI-ui-vty0-4] protocol inbound ssh telnet

# 更好的做法:使用不同的 VTY 范围
# VTY 0-2 仅 SSH
[HUAWEI] user-interface vty 0 2
[HUAWEI-ui-vty0-2] authentication-mode aaa
[HUAWEI-ui-vty0-2] protocol inbound ssh

# VTY 3-4 仅 Telnet(给老旧系统用,尽快淘汰)
[HUAWEI] user-interface vty 3 4
[HUAWEI-ui-vty3-4] authentication-mode aaa
[HUAWEI-ui-vty3-4] protocol inbound telnet

3.4 SSH 密钥认证(免密码登录)

# 场景:运维服务器使用 SSH 密钥登录华为设备,实现自动化运维

# 在设备上配置 RSA 公钥认证

# Step 1: 在运维服务器上生成密钥对
# ssh-keygen -t rsa -b 4096 -f ~/.ssh/huawei_rsa

# Step 2: 在华为设备上配置用户公钥
[HUAWEI] aaa
[HUAWEI-aaa] local-user auto_admin
[HUAWEI-aaa-local-user-auto_admin] password-expiration 0
[HUAWEI-aaa-local-user-auto_admin] service-type ssh
[HUAWEI-aaa-local-user-auto_admin] privilege level 15
[HUAWEI-aaa-local-user-auto_admin] authorization-attribute user-role network-admin
[HUAWEI-aaa-local-user-auto_admin] ssh rsa public-a rsa-key-a begin
[HUAWEI-aaa-local-user-auto_admin-ssh-rsa-pub-rsa-key-a] AAAA...(粘贴公钥内容)
[HUAWEI-aaa-local-user-auto_admin-ssh-rsa-pub-rsa-key-a] public-a rsa-key-a end

# Step 3: 配置 SSH 用户认证方式为公钥
[HUAWEI] ssh user auto_admin authentication-type publickey
[HUAWEI] ssh user auto_admin service-type all

# Step 4: VTY 配置
[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] authentication-mode aaa
[HUAWEI-ui-vty0-4] protocol inbound ssh

# 从运维服务器登录(免密码)
# ssh -i ~/.ssh/huawei_rsa auto_admin@192.168.1.1

3.5 限制 SSH 登录源地址

# 增强安全性:只允许特定管理网段通过 SSH 登录

# 方式1: ACL 限制 VTY 接口
[HUAWEI] acl 3000
[HUAWEI-acl-adv-3000] rule 5 permit tcp source 10.0.0.0 0.0.0.255 destination-port eq 22
[HUAWEI-acl-adv-3000] rule 10 deny tcp destination-port eq 22

[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] acl 3000 inbound

# 方式2: SSH 源地址过滤
[HUAWEI] ssh user ssh_admin source-ip 10.0.0.0 0.0.0.255

3.6 SSH 客户端连接设备

# 从其他华为设备 SSH 登录目标设备
<HUAWEI> ssh 192.168.1.1
# 首次连接时会提示确认主机密钥
# Are you sure you want to continue connecting (yes/no)? yes
# 输入用户名和密码

# 从 Linux/Mac 终端 SSH
$ ssh ssh_admin@192.168.1.1
ssh_admin@192.168.1.1's password:

# 从 Windows PowerShell
> ssh ssh_admin@192.168.1.1

# 使用 Putty(Windows 图形工具)
# 主机: 192.168.1.1, 端口: 22, 协议: SSH

四、实战配置/案例分析

4.1 案例一:Telnet 密码泄露事件

故障背景:某企业网络管理员使用 Telnet 管理核心交换机,被安全审计发现密码在网络上以明文传输,存在严重安全隐患。

# 安全风险演示:
# 使用 Wireshark 抓包分析 Telnet 流量

# Telnet 抓包结果:
# TCP 端口 23 的数据包中,可以清晰看到:
# Username: admin
# Password: Huawei@123
# 所有执行的命令也完全可见

# 整改方案:
# Step 1: 立即启用 SSH
[CORE-SW] rsa local-key-pair create
[CORE-SW] aaa
[CORE-SW-aaa] local-user admin service-type ssh
[CORE-SW] ssh user admin authentication-type password
[CORE-SW] ssh user admin service-type all
[CORE-SW] ssh server enable
[CORE-SW] user-interface vty 0 4
[CORE-SW-ui-vty0-4] protocol inbound ssh

# Step 2: 关闭 Telnet
[CORE-SW] user-interface vty 0 4
[CORE-SW-ui-vty0-4] protocol inbound ssh
# 仅保留 ssh,移除 telnet

# Step 3: 变更所有用户密码(之前的 Telnet 密码可能已泄露)
[CORE-SW] aaa
[CORE-SW-aaa] local-user admin password cipher NewSecure@2024

# Step 4: 配置 SSH 安全参数
[CORE-SW] ssh version 2          # 仅使用 SSHv2
[CORE-SW] ssh auth retry-max 3   # 最大重试 3 次
[CORE-SW] ssh idle-timeout 10    # 空闲 10 分钟自动断开

4.2 案例二:SSH 连接被拒绝

故障现象:管理员使用 SSH 客户端连接华为设备时,提示 "Connection refused" 或 "Connection closed by remote host"。

# 排查步骤:

# Step 1: 检查 SSH 服务是否启用
<HUAWEI> display ssh server status
 SSH Server Status: Running  # 应为 Running

# 如果显示 Not Running:
[HUAWEI] ssh server enable

# Step 2: 检查 VTY 接口配置
<HUAWEI> display user-interface vty 0 4
# 确认 protocol inbound 包含 ssh

# Step 3: 检查 RSA 密钥对是否生成
<HUAWEI> display rsa local-key-pair public
# 如果没有密钥对:
[HUAWEI] rsa local-key-pair create

# Step 4: 检查用户配置
<HUAWEI> display aaa local-user username admin
# 确认 service-type 包含 ssh
# 如果没有,添加:
[HUAWEI] aaa
[HUAWEI-aaa] local-user admin service-type ssh

# Step 5: 检查 SSH 用户配置
<HUAWEI> display ssh user
# 确认 SSH 用户已配置且认证方式正确

# Step 6: 检查 ACL 限制
<HUAWEI> display current-configuration user-interface vty 0 4
# 如果有 acl inbound,确认源 IP 未被拒绝

# Step 7: 检查防火墙
# 中间防火墙可能放行了 22 端口但拦截了 SSH 协商

4.3 案例三:批量设备 SSH 自动化运维

背景:运维团队需要管理 200 台华为交换机,要求实现 SSH 密钥免密登录。

# 方案:Ansible + SSH 密钥认证

# Step 1: 在每台设备上配置统一的自动化运维用户
# 使用 Python 脚本批量下发配置

# Python 脚本示例(使用 Netmiko):
# from netmiko import ConnectHandler
#
# devices = [
#     {'device_type': 'huawei_vrpv8', 'host': '192.168.1.1', 'username': 'admin', 'password': 'old_password'},
#     ...
# ]
#
# for device in devices:
#     conn = ConnectHandler(**device)
#     conn.send_config_set([
#         'aaa',
#         'local-user auto_admin',
#         'password-expiration 0',
#         'service-type ssh',
#         'privilege level 15',
#         'authorization-attribute user-role network-admin',
#         'ssh rsa public-a auto-key begin',
#         'AAAA...(公钥内容)',
#         'public-a auto-key end',
#         'return',
#         'ssh user auto_admin authentication-type publickey',
#         'ssh user auto_admin service-type all',
#         'user-interface vty 0 4',
#         'protocol inbound ssh',
#         'return',
#         'ssh server enable'
#     ])
#     conn.save_config()
#     conn.disconnect()

五、总结

对比维度 Telnet SSHv1 SSHv2
加密 无 有(弱) 有(强)
完整性校验 无 有(弱) 有(强)
安全性 极低 低 高
生产环境 禁止 不推荐 推荐
SSH 安全最佳实践 说明
使用 SSHv2 禁用 SSHv1
使用强密码 12 位以上,包含大小写+数字+特殊字符
使用密钥认证 优先使用 RSA/ECDSA 公钥认证
限制登录源 仅允许管理网段 SSH 登录
设置会话超时 空闲 10 分钟自动断开
限制重试次数 最大 3 次,防止暴力破解
启用登录失败锁定 连续失败 N 次后锁定用户,如 authentication-lock duration 30
关闭 Telnet 生产环境禁用 Telnet
定期更换密钥 每半年轮换 RSA 密钥对

思考

  1. SSH 使用非对称加密做密钥交换,对称加密做数据传输,为什么不是全程使用非对称加密?
  2. 首次 SSH 连接一台新设备时,为什么会提示确认主机密钥?如果不确认直接连接有什么风险?
  3. 为什么建议 SSH 密钥认证而不是密码认证?密钥认证的安全性体现在哪里?

下篇预告:第50篇:console 线连接与设备初始化配置