为什么 telnet 默认不存在?
在许多现代 Linux 发行版(包括 Ubuntu)中,telnet 命令默认没有预装,这是因为 telnet 协议存在严重的安全风险,它以明文方式传输所有数据(包括用户名和密码),非常容易被窃听。

Ubuntu 官方软件源默认不包含它,而是推荐使用更安全的替代品,如 ssh(Secure Shell)。
如何安装 telnet
虽然不推荐,但如果你确实需要使用 telnet,安装非常简单,Ubuntu 提供了两个相关的包:
telnetd:Telnet 服务器,如果你想让自己的 Ubuntu 机器作为 Telnet 服务器,让别人通过 Telnet 连接过来,就需要安装这个。telnet:Telnet 客户端,这是你用来连接到其他 Telnet 服务器的工具。通常我们说的“使用 telnet 命令”指的是安装这个客户端。
安装 Telnet 客户端(最常见的需求)
打开你的终端,运行以下命令:
# 更新软件包列表 sudo apt update # 安装 telnet 客户端 sudo apt install telnet
安装完成后,你就可以使用 telnet 命令了。

安装 Telnet 服务器(可选)
如果你想让你的 Ubuntu 机器成为一个 Telnet 服务器,可以运行:
sudo apt install telnetd
⚠️ 安全警告:强烈不建议在公网或任何不安全的网络环境中启用 Telnet 服务器,如果必须使用,请确保只在受信任的内网环境中运行,并考虑将其限制在特定的 IP 地址访问。
如何使用 telnet 命令
telnet 命令最常用的功能是测试网络连接和检查端口是否开放。
基本语法
telnet [主机名或IP地址] [端口号]
- 主机名或IP地址:你想连接的目标计算机。
- 端口号:目标计算机上监听服务的端口号,如果省略,默认尝试连接
23端口(这是 Telnet 服务的标准端口)。
常见使用场景
测试网络连通性

你可以通过连接到目标主机的常见端口(如 80 或 443)来测试是否能到达该主机。
示例:连接到 Google 的 Web 服务器 (端口 80)
telnet google.com 80
如果连接成功,你会看到类似下面的输出,并且光标会闪烁,等待你输入:
Trying 142.250.196.142...
Connected to google.com.
Escape character is '^]'.
你已经成功连接到了 Google 的 Web 服务器,你可以输入 HTTP 请求来获取网页信息(这是高级用法),要退出,请按 Ctrl+],然后输入 quit。
如果连接失败,你会看到 Connection refused 或 Unable to connect 之类的错误信息。
检查特定端口是否开放
这是 telnet 最强大的诊断功能之一,它可以帮你确定一个服务是否正在运行并监听指定的端口。
示例:检查本地邮件服务器 (SMTP, 端口 25)
telnet localhost 25
- 如果成功:说明本地 SMTP 服务正在运行并监听 25 端口。
- 如果失败:说明该端口没有被任何服务监听,或者被防火墙阻止了。
示例:检查本地 SSH 服务 (端口 22)
telnet localhost 22
- 如果成功:你会看到 SSH 协议的欢迎信息,这表明 SSH 服务正在运行。
- 如果失败:SSH 服务可能未启动或防火墙阻止了连接。
telnet 命令常用选项
-e <字符>:设置转义字符,默认是^](Ctrl + ])。-l <用户名>:指定登录时要使用的用户名(仅对某些服务器有效)。-a:尝试自动登录。
示例:
telnet -l myuser server.example.com 尝试用 myuser 用户名连接到 server.example.com。
如何退出 telnet
有几种方法可以退出 telnet 会话:
-
从
telnet内部退出:- 按
Ctrl + ](Ctrl + 右方括号),这会进入telnet的命令提示符模式。 - 你会看到
telnet>提示。 - 输入
quit或exit,然后按回车。
- 按
-
强制中断会话:
- 按
Ctrl + C,这会立即终止telnet进程。
- 按
更安全的替代方案:nc (Netcat)
nc (或 netcat) 是一个被称为“网络工具中的瑞士军刀”的强大工具,它可以实现 telnet 的几乎所有功能,并且更灵活、更强大。
在 Ubuntu 上,nc 通常默认安装,如果没有,可以用 sudo apt install netcat 安装。
使用 nc 检查端口是否开放:
语法和 telnet 非常相似。
# 检查 Google 的 80 端口 nc -zv google.com 80 # 检查本地 22 端口 nc -zv localhost 22
nc 命令选项解释:
-z:表示 Zero-I/O 模式,只扫描端口,不发送数据。-v:表示 Verbose(详细模式),显示更详细的信息。-u:表示 UDP 模式(默认是 TCP),用于测试 UDP 端口。
nc 的输出示例:
$ nc -zv google.com 80 Connection to google.com 80 port [tcp/http] succeeded!
$ nc -zv localhost 22 Connection to localhost 22 port [tcp/ssh] succeeded!
相比 telnet,nc 的输出更清晰,并且不会进入交互式会话,非常适合在脚本中使用。
| 功能 | telnet |
nc (Netcat) |
备注 |
|---|---|---|---|
| 安装 | sudo apt install telnet |
通常预装或 sudo apt install netcat |
nc 更常用 |
| 检查端口 | telnet host port |
nc -zv host port |
nc 输出更清晰,适合脚本 |
| 交互连接 | 是 (连接到 Telnet 服务器) | 是 (但无特殊协议处理) | telnet 主要用于此 |
| 安全性 | 极低 (明文传输) | 无内置安全 (取决于上层协议) | 两者都不适合传输敏感数据 |
| 推荐度 | 仅用于诊断 | 强烈推荐,功能更强大 | 对于日常网络诊断,优先使用 nc |
最终建议:
- 如果你只是想快速检查一个网络端口是否开放,请使用
nc -zv host port。 - 如果你必须连接到一个古老的、只支持 Telnet 协议的服务,那么安装并使用
telnet。 - 对于所有现代远程管理需求,请始终使用
ssh,它是安全、现代且功能丰富的标准。
