别再只用SSH了!在Ubuntu 20.04上快速启用Telnet服务,搞定那些老旧设备的远程调试

📅 2026/8/2 19:35:29 👁️ 阅读次数 📝 编程学习
别再只用SSH了!在Ubuntu 20.04上快速启用Telnet服务,搞定那些老旧设备的远程调试

Telnet在SSH时代的生存之道:Ubuntu 20.04下连接老旧设备的终极方案

当大多数运维工程师已经习惯用SSH作为远程管理的标准工具时,Telnet这个"古董级"协议似乎早已被遗忘在历史的角落。但现实工作中,那些运行了十几年的工业控制设备、网络交换机和嵌入式系统,往往只支持最基础的Telnet协议。上周我就遇到了这样一个案例:某制造厂的PLC控制器因为固件太旧,根本无法支持SSH连接,而产线调试又迫在眉睫。这时,在Ubuntu服务器上快速搭建一个Telnet服务就成了救命稻草。

1. 为什么在2023年还需要Telnet?

在开始技术部署之前,我们需要正视一个核心问题:为什么在SSH已经成为行业标准的今天,Telnet仍然有其存在的必要?这主要源于三个不可回避的现实因素:

设备兼容性困境:根据工业自动化协会的调查,全球仍有超过40%的工业控制设备运行着10年以上的老旧系统。这些设备通常具有以下特征:

  • 固件版本停止更新
  • 处理器性能有限
  • 仅支持最基本的网络协议

特殊调试场景需求:某些嵌入式设备的bootloader阶段只开放Telnet接口,用于底层调试。我曾遇到过一款智能网关设备,其恢复模式必须通过Telnet发送特定字节序列才能激活。

协议交互特殊性:部分网络设备(如某些型号的Cisco交换机)的console接口实际上使用的是Telnet协议的变种。通过标准SSH客户端反而无法正确解析特殊控制字符。

安全提示:Telnet的所有通信都是明文传输,绝对不要在公共网络中使用。仅在隔离的局域网环境或VPN隧道内启用此服务。

2. Ubuntu 20.04 Telnet服务部署全指南

2.1 基础组件安装

现代Ubuntu系统已经不再默认包含Telnet服务组件,我们需要通过APT包管理器安装两个关键软件包:

sudo apt update sudo apt install openbsd-inetd telnetd -y

这里选择openbsd-inetd而不是传统的inetutils-inetd,是因为前者具有更好的日志记录能力和连接限制功能。安装完成后,系统会自动创建以下关键文件:

  • /etc/inetd.conf- 主配置文件
  • /usr/sbin/in.telnetd- 守护进程二进制文件
  • /etc/default/openbsd-inetd- 服务参数配置

2.2 服务配置优化

默认安装的配置并不适合生产环境,我们需要进行以下针对性调整。首先编辑inetd的主配置文件:

sudo nano /etc/inetd.conf

确保包含以下行(如果不存在则添加):

telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

然后调整并发连接限制,防止资源耗尽:

echo "telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd -maxconn 5" | sudo tee -a /etc/inetd.conf

2.3 防火墙规则设置

Ubuntu 20.04默认使用UFW防火墙,需要放行Telnet端口(23):

sudo ufw allow 23/tcp sudo ufw enable

对于需要更高安全性的环境,可以限制只允许特定IP访问:

sudo ufw allow from 192.168.1.0/24 to any port 23

3. 高级配置与故障排查

3.1 登录提示信息定制

修改Telnet的登录banner可以增强设备识别度。创建自定义motd文件:

sudo nano /etc/motd.telnet

输入类似内容:

警告:授权访问仅限于公司员工 系统名称:PLC调试网关 最后维护:2023-08-15

然后修改inetd配置指向这个文件:

echo 'telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /usr/sbin/login -f /etc/motd.telnet' | sudo tee /etc/inetd.conf

3.2 连接状态监控

使用改进版的netstat命令查看活动连接:

sudo netstat -tnpa | grep -E '(telnet|:23)'

典型输出示例:

tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 12345/in.telnetd tcp 0 0 192.168.1.10:23 192.168.1.100:4321 ESTABLISHED 12346/in.telnetd

3.3 常见故障解决

登录失败问题

  1. 检查PAM认证配置:
sudo nano /etc/pam.d/login

确保包含标准Unix认证模块:

auth required pam_unix.so account required pam_unix.so
  1. 重启服务时建议使用systemctl:
sudo systemctl restart openbsd-inetd

字符编码问题: 如果遇到终端乱码,在客户端设置:

LANG=en_US.UTF-8 telnet 192.168.1.10

4. 安全增强方案

虽然Telnet本质不安全,但我们可以通过以下措施降低风险:

4.1 网络层防护

VPN隧道方案

[客户端] → [OpenVPN] → [Telnet服务器]

端口重定向技巧: 在跳板机上设置本地端口转发:

ssh -L 2323:localhost:23 jumpbox.example.com

然后连接本地端口:

telnet localhost 2323

4.2 会话日志记录

安装tcpdump记录所有Telnet会话:

sudo apt install tcpdump sudo tcpdump -i eth0 port 23 -w /var/log/telnet-$(date +%F).pcap

4.3 替代方案评估

当条件允许时,考虑这些更安全的替代方案:

方案优点缺点适用场景
SSH端口转发加密传输需要设备支持新设备连接
串口转IP网关物理隔离需要硬件投入工业环境
Web终端代理无需客户端延迟较高临时访问

在最近一次工厂设备升级项目中,我们最终采用了串口服务器+SSH转发的混合方案:将老设备的串口连接到Digi TS系列串口服务器,然后通过SSH隧道访问。这样既保证了安全性,又无需修改原有设备配置。