实用脚本能批量Telnet吗?一文讲透自动化运维利器
📖 目录导读
为什么需要批量Telnet?
在运维工作中,经常需要检测数十甚至上百台网络设备的连通性、端口状态或服务可用性,传统做法是手动逐个输入telnet IP 端口,这不仅效率低下,还容易出错。

核心痛点:
- 网络设备(交换机、路由器、防火墙)批量端口检测
- 服务器集群的端口开放状态扫描
- 远程设备批量重启或配置下发
实用脚本的价值: 通过编写Shell、Python或批处理脚本,可以实现一键批量Telnet,自动循环检测目标IP列表,并将结果输出为可读日志,这在网络运维、安全审计、系统管理中极为常见。
✅ 实用脚本完全能实现批量Telnet,且是运维提效的必备技能。
常见批量Telnet脚本方案
1 基于Shell的简易方案(Linux)
#!/bin/bash
# batch_telnet.sh
for ip in $(cat ip_list.txt); do
timeout 5 bash -c "echo quit | telnet $ip 22 2>/dev/null"
if [ $? -eq 0 ]; then
echo "$ip:22 端口开放"
else
echo "$ip:22 连接超时或拒绝"
fi
done
特点: 轻量级,依赖telnet命令,适合快速检测。
2 基于Python的增强方案(跨平台)
# batch_telnet.py
import telnetlib, time
with open('ips.txt') as f:
for line in f:
ip, port = line.strip().split(':')
try:
tn = telnetlib.Telnet(ip, port, timeout=5)
tn.write(b'quit\n')
print(f'{ip}:{port} - 连接成功')
tn.close()
except Exception as e:
print(f'{ip}:{port} - 失败: {e}')
特点: 支持更复杂的交互(如发送命令、读取回显),可记录详细日志。
一键式批处理脚本实战
1 准备IP列表文件
创建一个targets.txt,每行一个目标,格式为 IP:端口:
168.1.1:22
192.168.1.2:80
10.0.0.1:3389
2 完整脚本(支持并发检测)
利用multiprocessing加速检测:
# fast_batch_telnet.py
from multiprocessing.dummy import Pool as ThreadPool
import telnetlib
def check_host(host):
try:
with telnetlib.Telnet(host[0], host[1], timeout=3):
return f"{host[0]}:{host[1]} -> 开放"
except:
return f"{host[0]}:{host[1]} -> 关闭"
with open('targets.txt') as f:
targets = [line.strip().split(':') for line in f if line.strip()]
pool = ThreadPool(20) # 20线程并发
results = pool.map(check_host, targets)
pool.close()
pool.join()
for r in results:
print(r)
3 运行效果演示
168.1.1:22 -> 开放
192.168.1.2:80 -> 开放
10.0.0.1:3389 -> 关闭
优势: 20并发情况下,检测100个目标仅需5-10秒,远超手动操作。
批量Telnet常见问题解答
❓ Q1:脚本脚本提示“telnet命令未找到”怎么办?
A: 在Linux中安装telnet-client(如yum install telnet -y),或改用Python自带的telnetlib模块(无需额外安装)。
❓ Q2:批量Telnet会引发安全风险吗?
A: 是的,建议:
- 避免在公网大规模扫描
- 使用专用跳板机执行脚本
- 对IP列表加密存储
- 脚本运行后及时清除日志
❓ Q3:如何检测Telnet后的设备版本信息?
A: 在连接成功后,使用tn.read_until(b'login:')捕获欢迎信息,然后发送quit退出,Python示例:
tn.write(b'\n') output = tn.read_until(b'#', time=2) print(output.decode())
❓ Q4:脚本对Windows是否友好?
A: Windows默认无telnet客户端,需启用“Telnet客户端”功能或使用powershell的Test-NetConnection替代:
Test-NetConnection -ComputerName 192.168.1.1 -Port 3389
脚本安全与运维建议
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 临时快速检测 | Shell脚本+timeout | 一行命令,最快实现 |
| 批量运维管理 | Python脚本+日志记录 | 可追踪、可重复执行 |
| 大型网络扫描 | 分布式脚本+任务队列 | 结合Ansible、Saltstack |
核心规范:
- 限速检测:添加
sleep 1间隔,避免触发设备防护 - 异常处理:捕获
ConnectionRefusedError、socket.timeout - 结果保留:输出到
result_$(date +%Y%m%d).log,便于复盘
实用脚本完全能够实现批量Telnet,且通过Python、Shell等工具可大幅提升检测效率,实际应用中,建议根据自身环境选择适合的方案:
- 简单检测:Shell脚本
- 复杂交互:Python+telnetlib
- 跨平台场景:考虑使用
ssh替代或封装成API
掌握批量Telnet脚本编写,是运维自动化入门的重要一步,更是网络管理员日常工作的得力助手。