08-2. Telnet 協定:遠端登入的起源
深入理解 Telnet 的運作原理與為何被 SSH 取代
目錄
📡 Telnet 協定:遠端登入的起源
⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐ (簡單)
🎯 本篇重點
理解 Telnet 的基本概念、運作原理、為什麼不安全、與 SSH 的差異,以及現代的有限用途。
🤔 什麼是 Telnet?
Telnet (Teletype Network) = 遠端終端機協定
一句話解釋: Telnet 是最早的遠端登入協定(1969年),讓你可以透過網路連線到另一台電腦的終端機,但所有資料都是明文傳輸,非常不安全。
比喻:透明玻璃屋的電話
Telnet = 在透明玻璃屋裡打電話
- 所有人都能看到你在說什麼
- 帳號密碼、指令、輸出都被看光
- 完全沒有隱私
SSH = 在隔音密封房間裡打電話
- 外人完全聽不到
- 所有內容都加密
- 完全安全🏗️ Telnet 在網路模型中的位置
OSI 7 層模型
┌──────────────────────────────┬─────────────────┐
│ 7. Application Layer (應用層) │ Telnet │ ← Telnet 在這裡
├──────────────────────────────┼─────────────────┤
│ 6. Presentation Layer (表示層)│ 明文(無加密) │
├──────────────────────────────┼─────────────────┤
│ 5. Session Layer (會話層) │ 建立、維護會話 │
├──────────────────────────────┼─────────────────┤
│ 4. Transport Layer (傳輸層) │ TCP │
├──────────────────────────────┼─────────────────┤
│ 3. Network Layer (網路層) │ IP │
├──────────────────────────────┼─────────────────┤
│ 2. Data Link Layer (資料鏈結層)│ Ethernet │
├──────────────────────────────┼─────────────────┤
│ 1. Physical Layer (實體層) │ 網路線、光纖 │
└──────────────────────────────┴─────────────────┘Telnet 位於第 7 層(應用層)
- Telnet 是應用層協定
- 提供遠端終端機服務
- 沒有加密(表示層是明文)
TCP/IP 4 層模型
┌─────────────────────────────┬─────────────────┐
│ 4. Application Layer (應用層) │ Telnet │ ← Telnet 在這裡
├─────────────────────────────┼─────────────────┤
│ 3. Transport Layer (傳輸層) │ TCP │
├─────────────────────────────┼─────────────────┤
│ 2. Internet Layer (網際網路層)│ IP │
├─────────────────────────────┼─────────────────┤
│ 1. Network Access (網路存取層)│ Ethernet │
└─────────────────────────────┴─────────────────┘Telnet 位於第 4 層(應用層)
- 在 TCP/IP 模型中,Telnet 是應用層協定
- 使用 TCP Port 23
- TCP 提供可靠傳輸
對比表:
| 協定 | OSI 層級 | TCP/IP 層級 | Port | 加密 | 安全性 | 現代使用 |
|---|---|---|---|---|---|---|
| Telnet | Layer 7 | Layer 4 | 23 | ❌ 明文 | ⚠️ 極不安全 | ❌ 已淘汰 |
| SSH | Layer 7 | Layer 4 | 22 | ✅ 加密 | ✅ 安全 | ✅ 主流 |
| rlogin | Layer 7 | Layer 4 | 513 | ❌ 明文 | ⚠️ 不安全 | ❌ 已淘汰 |
重點:
- Telnet 是應用層協定(兩種模型都是)
- 使用 TCP Port 23
- 完全明文傳輸(帳號、密碼、所有資料)
- 現代絕對不應該使用(除了特殊測試場景)
為什麼 Telnet 使用 TCP?
遠端登入的需求:
1. 可靠性 ✅
每個指令都必須送達
TCP 保證可靠傳輸
2. 順序性 ✅
指令必須按順序執行
TCP 保證順序
3. 互動式 ✅
需要持續的雙向通訊
TCP 提供全雙工連線
UDP 不適合:
❌ 不可靠(指令可能丟失)
❌ 無順序保證
❌ 不適合互動式操作📜 歷史:Telnet 的誕生與衰落
時間線
1969 年 📡 Telnet 誕生
└─ RFC 15 定義
ARPANET 時代的產物
當時網路只在學術機構,沒考慮安全
1973 年 📝 Telnet 標準化
└─ RFC 854、855
成為正式標準
1980s 🌐 Telnet 黃金時期
└─ 大學、研究機構廣泛使用
Unix 系統的標準遠端登入方式
1995 年 🔐 SSH 誕生
└─ Tatu Ylönen 發明 SSH
因為密碼竊聽事件而創造
1999 年 📉 Telnet 開始式微
└─ SSH 普及
安全意識提高
2006 年 ⚠️ 正式被標示為不安全
└─ 各大組織禁用 Telnet
PCI DSS 等標準禁止使用
2010s ❌ 幾乎完全淘汰
└─ 只剩測試用途
正式環境禁用
現在 🔬 僅存測試場景
└─ 測試網路服務
除錯 SMTP、HTTP 等協定為什麼 Telnet 會被淘汰?
1969 年的網路環境:
- 只有大學和研究機構使用
- 所有人都是「好人」
- 沒有駭客概念
- 安全性不是考量
現代網路環境:
- 全球數十億人使用
- 充滿惡意攻擊者
- 資料竊取、間諜活動
- 安全性是首要考量
結果:
Telnet 的明文傳輸設計
在現代網路環境中
完全不可接受!🚨 Telnet 的安全問題
問題 1:明文傳輸帳號密碼
場景:用 Telnet 登入伺服器
你輸入:
telnet 192.168.1.100
Username: admin
Password: myPassword123
網路封包(明文):
User: admin
Pass: myPassword123
駭客用 Wireshark 抓包:
👁️ 看到 → Username: admin
👁️ 看到 → Password: myPassword123
結果:
❌ 帳號密碼完全暴露
❌ 駭客可以直接登入你的帳號
❌ 完全沒有防護實際抓包範例:
Telnet 封包內容(明文可見):
Frame 1: Username
Data: admin\r\n
Frame 2: Password
Data: myPassword123\r\n
Frame 3: Command
Data: ls -la /home\r\n
Frame 4: Output
Data: drwxr-xr-x 5 admin admin 4096 Jan 15 20:00 .\r\n
drwxr-xr-x 3 root root 4096 Jan 01 00:00 ..\r\n
-rw------- 1 admin admin 220 Jan 15 20:00 secret.txt\r\n
所有內容一覽無遺!問題 2:所有指令都被看光
你執行的指令:
$ cat /etc/passwd
$ vim secret.txt
$ mysql -u root -p
password: db_password_123
駭客看到:
✅ 你的系統結構(/etc/passwd)
✅ 你的敏感檔案(secret.txt)
✅ 你的資料庫密碼(db_password_123)
結果:
❌ 完全沒有隱私
❌ 所有操作都被監控
❌ 系統完全暴露問題 3:中間人攻擊(MITM)
正常流程:
你 ↔ Telnet ↔ 伺服器
中間人攻擊:
你 ↔ 駭客 ↔ 伺服器
↑
偽裝成伺服器
過程:
1. 你以為連到伺服器
實際連到駭客的假伺服器
2. 你輸入帳號密碼
駭客記錄下來
3. 駭客轉發給真伺服器
你完全不知道被攔截
4. 駭客可以:
- 記錄所有指令
- 修改指令(植入惡意指令)
- 竊取資料
結果:
❌ 無法驗證伺服器身份
❌ 無法防止中間人攻擊
❌ 資料可能被竄改問題 4:無法防止重播攻擊
場景:駭客錄下你的登入過程
駭客做的事:
1. 抓取你的登入封包
Username: admin
Password: myPassword123
2. 稍後重播(Replay)這些封包
→ 直接登入你的帳號
3. 不需要破解密碼
→ 直接重用你的登入資料
結果:
❌ 無法防止重播攻擊
❌ 即使改密碼,舊封包仍可能有用📡 Telnet 運作原理
連線建立流程
Client Server (Port 23)
│ │
├──── 1. TCP 連線 ────────────────>│
│ (三次握手) │
│ │
│<──── 2. 歡迎訊息 ────────────────┤
│ "Welcome to Server" │
│ │
├──── 3. Username ────────────────>│
│ "admin" │
│ │
│<──── 4. Password Prompt ─────────┤
│ "Password:" │
│ │
├──── 5. Password ────────────────>│
│ "myPassword123" │
│ │
│<──── 6. Login Success ───────────┤
│ "Login successful" │
│ │
├──── 7. Command ─────────────────>│
│ "ls -la" │
│ │
│<──── 8. Output ──────────────────┤
│ (檔案清單) │
│ │
└──── 9. Logout ──────────────────>│
"exit" │
所有內容都是明文!Telnet 命令
基本連線:
# 連線到伺服器
telnet server.example.com
# 指定 Port
telnet server.example.com 23
# 連線到 IP
telnet 192.168.1.100特殊鍵:
Ctrl + ] 進入 Telnet 命令模式
quit 離開 Telnet
close 關閉連線
display 顯示設定
status 顯示狀態Telnet 協定訊息格式
Telnet 使用 NVT(Network Virtual Terminal)
每個字元直接傳送(明文):
輸入 'a' → 傳送 0x61
輸入 'b' → 傳送 0x62
特殊命令使用 IAC(Interpret As Command):
IAC = 0xFF (255)
範例:
IAC WILL ECHO
→ 0xFF 0xFB 0x01
→ 「伺服器要控制回顯」
IAC DO ECHO
→ 0xFF 0xFD 0x01
→ 「客戶端同意伺服器控制回顯」🔧 Telnet 的現代用途(僅限測試)
用途 1:測試 HTTP 伺服器
# 手動發送 HTTP 請求
telnet www.example.com 80
# 連線後輸入:
GET / HTTP/1.1
Host: www.example.com
# 按 Enter 兩次
# 看到回應:
HTTP/1.1 200 OK
Content-Type: text/html
...
優點:
✅ 可以手動測試 HTTP 協定
✅ 除錯 HTTP 問題
✅ 理解 HTTP 運作原理用途 2:測試 SMTP 伺服器
# 測試郵件伺服器
telnet mail.example.com 25
# SMTP 會話:
220 mail.example.com SMTP Ready
HELO client.example.com
250 mail.example.com
MAIL FROM:<sender@example.com>
250 OK
RCPT TO:<recipient@example.com>
250 OK
DATA
354 Start mail input
Subject: Test
This is a test email.
.
250 OK Queued
QUIT
221 Bye
優點:
✅ 測試 SMTP 是否運作
✅ 除錯郵件發送問題
✅ 驗證郵件伺服器設定用途 3:測試 Port 是否開啟
# 測試 MySQL Port
telnet 192.168.1.100 3306
# 如果連線成功:
Connected to 192.168.1.100
→ Port 3306 開啟 ✅
# 如果連線失敗:
Connection refused
→ Port 3306 關閉 ❌
# 測試 Redis
telnet localhost 6379
PING
+PONG
優點:
✅ 快速測試 Port 開啟狀態
✅ 不需要安裝專用工具
✅ 大多數系統內建用途 4:測試 POP3/IMAP
# 測試 POP3
telnet mail.example.com 110
USER username
PASS password
LIST
QUIT
# 測試 IMAP
telnet mail.example.com 143
a001 LOGIN username password
a002 LIST "" "*"
a003 LOGOUT
優點:
✅ 測試郵件收取
✅ 除錯 POP3/IMAP 問題⚖️ Telnet vs SSH 詳細對比
安全性對比
| 特性 | Telnet | SSH |
|---|---|---|
| 傳輸加密 | ❌ 明文 | ✅ 加密 (AES-256) |
| 密碼安全 | ❌ 明文可見 | ✅ 加密傳輸 |
| 伺服器驗證 | ❌ 無 | ✅ Host Key 驗證 |
| 完整性保護 | ❌ 無 | ✅ HMAC |
| 防中間人 | ❌ 無 | ✅ 有 |
| 防重播攻擊 | ❌ 無 | ✅ 有 |
| 公私鑰認證 | ❌ 不支援 | ✅ 支援 |
功能對比
| 功能 | Telnet | SSH |
|---|---|---|
| 遠端登入 | ✅ | ✅ |
| 檔案傳輸 | ❌ | ✅ (SCP, SFTP) |
| Port Forwarding | ❌ | ✅ |
| X11 Forwarding | ❌ | ✅ |
| 壓縮傳輸 | ❌ | ✅ |
| 連線多路復用 | ❌ | ✅ |
效能對比
Telnet:
✅ 低開銷(無加密)
✅ 速度快
❌ 但不安全,速度優勢無意義
SSH:
⚠️ 有加密開銷
✅ 現代硬體影響極小
✅ 安全性遠大於效能損失
結論:
SSH 的加密開銷在現代硬體上幾乎可忽略
安全性遠比速度重要
完全沒有理由使用 Telnet🎓 面試常見問題
Q1:Telnet 和 SSH 有什麼差別?為什麼不能用 Telnet?
A:最大差異是安全性
Telnet(已淘汰):
❌ 明文傳輸
- 帳號密碼明文可見
- 所有指令明文可見
- 可被竊聽、竄改
- 無法驗證伺服器身份
範例危害:
用 Wireshark 抓包可直接看到:
Username: admin
Password: myPassword123
→ 帳號密碼直接暴露!
SSH(現代標準):
✅ 加密傳輸
- 所有資料加密(AES-256)
- 伺服器身份驗證(Host Key)
- 完整性保護(HMAC)
- 公私鑰認證
範例:
即使被監聽,也只能看到:
sD9fj#$kL@mNpQ2vX... (亂碼)
→ 完全看不懂!
為什麼不能用 Telnet?
1. 安全標準禁止(PCI DSS、ISO 27001)
2. 公司政策禁止
3. 容易被攻擊
4. 法規要求加密
例外(僅限測試):
✅ 測試 HTTP/SMTP 等協定
✅ 測試 Port 開啟狀態
✅ 區域網路除錯
⚠️ 但絕對不能用於正式登入!
記憶:
Telnet = 明信片(任何人都能看)
SSH = 密封信件(只有收件人能看)Q2:Telnet 現在還有什麼用途?
A:僅限測試用途,絕對不能用於正式登入
現代用途(都是測試):
1️⃣ 測試 HTTP 伺服器
telnet www.example.com 80
GET / HTTP/1.1
Host: www.example.com
→ 手動發送 HTTP 請求
→ 除錯 HTTP 問題
2️⃣ 測試 SMTP 郵件伺服器
telnet mail.example.com 25
HELO client.com
MAIL FROM:<test@test.com>
...
→ 測試郵件發送
→ 驗證 SMTP 設定
3️⃣ 測試 Port 開啟狀態
telnet 192.168.1.100 3306
成功 → Port 開啟
失敗 → Port 關閉
4️⃣ 測試 Redis/Memcached
telnet localhost 6379
PING
+PONG
→ 測試快取服務
禁止用途:
❌ 遠端登入伺服器(用 SSH)
❌ 管理網路設備(用 SSH)
❌ 任何需要帳號密碼的場景
❌ 公共網路環境
替代方案:
HTTP 測試 → curl、httpie
Port 測試 → nc (netcat)、nmap
遠端登入 → SSH
結論:
Telnet 只在測試無需認證的協定時有用
其他時候都應該用 SSHQ3:如何用 Telnet 測試網路服務是否正常?
A:測試各種協定的 Port 和基本功能
測試 Web Server(HTTP):
telnet www.example.com 80
輸入:
GET / HTTP/1.1
Host: www.example.com
[按 Enter 兩次]
看到回應 → Web Server 正常
Connection refused → Web Server 未啟動
測試 SMTP:
telnet mail.example.com 25
看到:
220 mail.example.com SMTP Ready
→ SMTP 正常
Connection refused
→ SMTP 未啟動
測試 MySQL:
telnet 192.168.1.100 3306
Connected
→ MySQL Port 開啟
Connection refused
→ MySQL 未啟動或 Port 錯誤
測試 Redis:
telnet localhost 6379
輸入:
PING
看到:
+PONG
→ Redis 正常
其他測試:
POP3: telnet mail.example.com 110
IMAP: telnet mail.example.com 143
FTP: telnet ftp.example.com 21
優點:
✅ 快速測試 Port 開啟
✅ 驗證服務運作
✅ 不需要安裝額外工具
注意:
⚠️ 只能測試,不能正式使用
⚠️ 不要輸入真實帳號密碼
⚠️ 現代更推薦用 nc (netcat) 或 curlQ4:為什麼 Telnet 被設計成明文傳輸?
A:時代背景問題
1969 年的網路環境:
使用者:
- 只有大學教授、研究人員
- 只有少數幾個機構
- 所有人都是「好人」
網路:
- ARPANET(只有幾個節點)
- 完全封閉的學術網路
- 沒有外部連線
安全概念:
- 沒有「駭客」概念
- 沒有「資料竊取」概念
- 信任所有使用者
技術限制:
- 電腦運算能力極低
- 加密運算太耗資源
- 速度優先於安全
設計哲學:
「簡單就好」
不需要複雜的加密
專注於功能實現
現代網路環境(為什麼不能再用):
使用者:
- 全球數十億人
- 任何人都能上網
- 充滿惡意攻擊者
網路:
- Internet(開放網路)
- 全球互連
- 無法信任任何連線
安全威脅:
- 駭客攻擊
- 資料竊取
- 間諜活動
- 身份盜用
技術進步:
- 現代電腦運算能力強大
- 加密開銷可忽略
- 安全性是必需品
結論:
Telnet 是時代產物
在封閉、信任的環境中設計
完全不適合現代開放、充滿威脅的 Internet
這就是為什麼必須用 SSH 取代✅ 重點回顧
Telnet 定義:
- Telnet = Teletype Network
- 最早的遠端登入協定(1969年)
- TCP Port 23
核心問題:
- ❌ 明文傳輸(帳號、密碼、所有資料)
- ❌ 無伺服器身份驗證
- ❌ 無完整性保護
- ❌ 無法防止中間人攻擊
- ❌ 無法防止重播攻擊
vs SSH:
| 特性 | Telnet | SSH |
|---|---|---|
| 加密 | ❌ | ✅ |
| 安全性 | ⚠️ 極不安全 | ✅ 安全 |
| 現代使用 | ❌ 已淘汰 | ✅ 主流 |
現代用途(僅限測試):
# 測試 HTTP
telnet www.example.com 80
# 測試 SMTP
telnet mail.example.com 25
# 測試 Port
telnet 192.168.1.100 3306
# 測試 Redis
telnet localhost 6379禁止用途:
- ❌ 遠端登入伺服器(用 SSH)
- ❌ 任何需要帳號密碼的場景
- ❌ 公共網路環境
- ❌ 正式生產環境
為什麼被淘汰:
- 1969 年設計(封閉學術網路)
- 沒考慮安全性
- 現代網路充滿威脅
- 法規要求加密(PCI DSS、ISO 27001)
替代方案:
- 遠端登入 → SSH
- HTTP 測試 → curl、httpie
- Port 測試 → nc (netcat)、nmap
- 檔案傳輸 → SCP、SFTP
面試重點:
- ✅ Telnet vs SSH 差異(明文 vs 加密)
- ✅ 為什麼不能用 Telnet(安全問題)
- ✅ 現代測試用途(HTTP、SMTP、Port)
- ✅ 歷史背景(1969 年設計)
記憶口訣:
- Telnet = 「明文傳輸,絕對不用」
- SSH = 「加密安全,現代標準」
- 用途 = 「只測試,不登入」
重要:
🚨 在任何正式環境中使用 Telnet 都是嚴重的安全漏洞!
🚨 PCI DSS、ISO 27001 等標準明確禁止 Telnet!
🚨 永遠使用 SSH 代替 Telnet 進行遠端登入!上一篇: 08-1. SSH 安全遠端登入 下一篇: 09-1. 電子郵件協定
相關文章:
最後更新:2025-01-15