导读:本期聚焦于郑钧天创作的《Linux中telnet是什么?它和SSH有什么区别又该如何使用》,敬请观看详情。把telnet理解成早期局域网里“明信片式”的远程终端工具,就能明白它为何逐渐被淘汰。在Linux系统里,telnet服务基于TCP二十三端口,把客户端按键和服务器回显以纯文本方式双向传输,账号密码不加任何封装直接落在网络包里。相较之下SSH用加密通道解决了嗅探风险。本文从协议原理讲清telnet的工作过程,列出centos与ubuntu下的安装启动命令,并给出用nc命令检测端口连通性的实操,帮助运维新手在隔离环境做设备调试时正确选型,避免把明文协议误用到公网造成泄露。

在Linux系统里,telnet是一种基于TCP协议的远程终端登录工具,它允许用户在本地计算机上通过命令行连接并操作远端主机。telnet服务端默认监听23端口,客户端发起连接后,双方以明文方式交换按键指令与输出结果。这种机制诞生于网络还相对可信的年代,设计目标是提供简单的双向字符通信,而不是保障传输安全。理解telnet的本质,要从它的协议交互模型和所处网络环境说起。

Linux中telnet是什么?它和SSH有什么区别又该如何使用

telnet的协议原理与通信过程

telnet协议定义在RFC 854中,核心是一个简单的网络虚拟终端(NVT)模型。当Linux主机运行telnetd守护进程后,若有客户端连接23端口,服务端会先发送一些选项协商报文,用来确认是否开启回显、窗口大小调整等扩展功能。协商完成后,用户在客户端敲击的每一个字符都会封装进TCP报文发往服务器,服务器执行命令后将结果原样返回。整个过程没有加密层,所有数据包括输入的用户名和口令都是普通文本。

正因为如此,在交换机的带外管理口、虚拟机内部的隔离网络等可信环境中,telnet依然因其轻量而被使用。但在任何经过不可信网络的链路里,抓包工具几秒内就能看到完整登录凭证。我们可以用一段简单的Python代码模拟telnet客户端向服务端建立连接并读取欢迎信息,帮助理解其明文特性。

import socket

# 模拟telnet客户端连接本地23端口
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 23))
# 读取服务端欢迎信息,明文返回
data = s.recv(1024)
print(data.decode('utf-8', errors='ignore'))
s.close()

从上面的代码可以看出,telnet通信就是最基础的socket文本读写,没有任何加密封装。这也导致它在现代安全规范里被标记为不安全协议,很多Linux发行版默认不再安装telnet服务端,仅保留客户端供内网设备调试。

Linux下telnet的安装、启动与基础用法

在Ubuntu或Debian系发行版中,若需要telnet服务端,可通过apt-get install telnetd获取,客户端则一般是apt-get install telnet。CentOS或RHEL系则使用yum install telnet-server telnet。安装后,传统方式由xinetd托管telnet服务,需要修改/etc/xinetd.d/telnet中的disable字段为no,再重启xinetd;较新系统也可用systemd直接启动telnet.socket。以下是在CentOS中开放服务的示例。

# 安装服务端和客户端
yum install -y telnet telnet-server
# 允许telnet socket监听
systemctl enable telnet.socket
systemctl start telnet.socket
# 查看23端口状态
ss -tlnp | grep 23

客户端使用也非常直接,在终端输入telnet 192.168.0.1即可连接目标主机,随后按提示输入系统账号与密码。要注意Linux的telnet登录通常禁止使用root直接登入,需先用普通用户登录再su切换,这是一道基础权限围栏。此外,由于telnet不支持密钥认证,所有账号必须设置密码且密码以明文穿越网络。

如果需要验证远端telnet服务是否可达,又不想暴露账号,可借助nc命令做端口探测:nc -vz 192.168.0.1 23,连通会回显succeeded。这种方式比直接telnet更安全,不会触发登录交互。在运维排障时,先确认端口再决定是否用telnet交互,能减少很多无效暴露。

telnet与SSH的核心差异及选型建议

SSH(Secure Shell)同样用于远程登录,但它在传输层做了加密与完整性校验,默认端口是22。与telnet相比,SSH采用非对称加密协商会话密钥,后续通信都用对称加密保护,中间人无法读取内容。此外SSH支持公钥认证,可做到免密且防口令嗅探。下面的表格列出两者关键区别。

对比项telnetSSH
加密无,全程明文有,传输加密
默认端口2322
认证方式仅账号密码密码或公钥
适用场景内网隔离设备调试几乎所有远程管理

从架构思考角度看,当一个系统必须对外提供远程维护能力时,应默认关闭telnet、仅保留SSH,并通过/etc/ssh/sshd_config禁用密码登录、只允许密钥。反过来,在实验室里调试一台不连外网的路由器,telnet因其实现简单、占用资源少,仍是快捷方案。选型核心在于“信任边界”:数据走过的网络是否可信,决定了能否用明文协议。

实践中还有一个常见误区,认为telnet速度比SSH快所以生产环境可用。实际上现代CPU处理SSH加密的损耗微乎其微,而泄露凭证导致的被控代价远超省下的毫秒。因此除了封闭测试网,其他情况都应把telnet视为禁用的历史协议,用SSH或串行控制台替代。理清这一概念,才能避免把调试习惯带进公网环境引发安全事故。

telnetLinux远程登录SSH对比修改时间:2026-08-17 01:32:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。