1. 为什么你需要从Telnet转向SSH?
记得我刚入行做网络运维的时候,Telnet几乎是所有老工程师的标配工具。直到有次公司内网被入侵,攻击者就是通过抓取Telnet明文传输的管理员密码,轻松拿下了核心路由器。那次事件后,我花了整整一周时间把所有网络设备都迁移到了SSH协议。
Telnet就像是用明信片寄送银行密码——所有信息都暴露无遗。它最大的问题是所有通信内容(包括用户名密码)都以明文传输,任何能截获网络流量的人都能直接看到你的登录凭证。而SSH则像是给你的通信加了保险箱,所有数据都经过加密处理,即使被截获也无法直接读取。
在实际企业环境中,我建议所有新部署的思科设备都应该直接配置SSH。对于还在使用Telnet的老设备,可以按照以下优先级进行迁移:
- 首先处理暴露在公网的设备
- 其次是核心交换机和路由器
- 最后是内部接入层设备
注意:思科IOS默认不启用SSH服务,需要先完成一些基础配置才能使用SSH功能。
2. Telnet基础配置与安全隐患
虽然我们不推荐长期使用Telnet,但了解它的配置方式对理解网络设备管理很有帮助。下面是一个典型的Telnet配置流程:
Router> enable Router# configure terminal Router(config)# line vty 0 4 Router(config-line)# password telnet123 Router(config-line)# login Router(config-line)# transport input telnet Router(config-line)# end这段配置开启了5个虚拟终端会话(0-4),设置登录密码为"telnet123",并允许Telnet接入。配置完成后,你就能用Telnet客户端连接路由器了。
但这样配置存在几个严重问题:
- 密码明文存储:show running-config时会直接显示密码
- 无用户区分:所有用户共用同一个密码
- 无加密传输:密码和所有命令都明文传输
我曾用Wireshark做过实验,在同一个局域网内抓取Telnet流量,可以实时看到输入的所有命令和输出结果,包括配置修改和密码变更操作。这种透明性对运维简直是灾难。
3. SSH完整配置指南
3.1 前期准备工作
在配置SSH前,需要确保设备满足几个基本条件:
Router> enable Router# show version | include IOS Cisco IOS Software, 1841 Software (C1841-ADVIPSERVICESK9-M), Version 12.4(25b)关键要求:
- IOS版本必须支持SSH(通常是12.1(1)T及以后版本)
- 设备必须有主机名和域名(SSH密钥生成必需)
- 需要配置本地用户名密码或AAA认证
我建议先完成这些基础配置:
Router(config)# hostname Corp-Router Corp-Router(config)# ip domain-name company.com Corp-Router(config)# crypto key generate rsa生成RSA密钥时会提示输入密钥长度,2048位是目前的安全标准。密钥生成后,可以用show crypto key mypubkey rsa命令验证。
3.2 完整SSH配置步骤
下面是我在多个项目中验证过的最佳实践配置:
! 创建本地管理员账户 Corp-Router(config)# username admin privilege 15 secret Admin@123 ! 配置SSH参数 Corp-Router(config)# ip ssh version 2 Corp-Router(config)# ip ssh time-out 60 Corp-Router(config)# ip ssh authentication-retries 3 ! 启用SSH访问 Corp-Router(config)# line vty 0 4 Corp-Router(config-line)# transport input ssh Corp-Router(config-line)# login local这样配置实现了:
- 强制使用SSHv2(更安全的版本)
- 60秒无操作自动断开
- 最多3次认证尝试
- 使用本地用户数据库认证
配置完成后,可以用show ip ssh检查SSH服务状态,用ssh -l admin 192.168.1.1从客户端测试连接。
4. 高级安全加固技巧
4.1 限制访问源IP
在生产环境中,我强烈建议限制允许SSH连接的源IP地址:
Corp-Router(config)# access-list 22 permit 192.168.1.100 Corp-Router(config)# access-list 22 deny any log Corp-Router(config)# line vty 0 4 Corp-Router(config-line)# access-class 22 in这样配置后,只有192.168.1.100这个管理终端能发起SSH连接,其他尝试都会被拒绝并记录日志。
4.2 使用证书认证
对于更高安全要求的场景,可以配置证书认证替代密码:
! 生成CA证书 Corp-Router(config)# crypto pki trustpoint MY_CA Corp-Router(ca-trustpoint)# enrollment selfsigned Corp-Router(ca-trustpoint)# subject-name CN=Corp-Router Corp-Router(ca-trustpoint)# rsakeypair 2048 ! 配置SSH使用证书 Corp-Router(config)# ip ssh pubkey-chain Corp-Router(ssh-pubkey-chain)# username admin Corp-Router(ssh-pubkey-chain-user)# key-hash ssh-rsa 0123456789ABCDEF证书认证彻底避免了密码被暴力破解的风险,但管理成本较高,适合有专业运维团队的企业。
5. 运维中的常见问题排查
即使正确配置了SSH,实际使用中还是会遇到各种问题。以下是几个我遇到过的典型故障:
连接被拒绝
- 检查
ip ssh是否显示SSH已启用 - 确认
transport input包含ssh - 验证ACL没有阻止连接
认证失败
- 检查用户名密码是否正确
- 确认用户权限级别足够
- 查看
show login failures记录
连接超时
- 调整
ip ssh time-out值 - 检查网络延迟和防火墙设置
- 验证路由可达性
有个特别隐蔽的问题我遇到过:IOS版本漏洞导致SSH服务崩溃。解决方案是升级到推荐版本,并配置ip ssh maxstartups限制并发连接数。
6. 平滑迁移方案
对于已经使用Telnet的环境,我建议采用分阶段迁移策略:
并行运行期(1-2周):
Corr-Router(config-line)# transport input telnet ssh同时允许两种协议,给团队适应时间
过渡期(1个月):
Corr-Router(config-line)# transport input ssh telnet优先尝试SSH,失败才用Telnet
完全迁移:
Corr-Router(config-line)# transport input ssh彻底禁用Telnet
在迁移过程中,可以使用logging monitor和terminal monitor命令实时查看SSH登录日志,及时发现配置问题。
最后提醒一点:修改配置后一定要测试从外网和内网不同位置的连接,我曾经遇到过NAT设备过滤SSH流量的情况,导致外网管理中断。现在我的检查清单里永远包含多位置连接测试这一项。