第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 密钥对 |
思考
- SSH 使用非对称加密做密钥交换,对称加密做数据传输,为什么不是全程使用非对称加密?
- 首次 SSH 连接一台新设备时,为什么会提示确认主机密钥?如果不确认直接连接有什么风险?
- 为什么建议 SSH 密钥认证而不是密码认证?密钥认证的安全性体现在哪里?
下篇预告:第50篇:console 线连接与设备初始化配置