歡迎光臨
每天分享高質量文章

Telnet,愛一直在 | Linux 中國

登入遠端伺服器,你可能不會也從未考慮過它。但這並不意味著 telnet 命令在除錯遠端連線問題時不是一個實用的工具。
— Elliot Cooper


本文導航
編譯自 | https://bash-prompt.net/guides/telnet/ 
 作者 | Elliot Cooper
 譯者 | XYenChi

Telnet,是系統管理員登入遠端伺服器的一種協議和工具。然而,由於所有的通訊都沒有加密,包括密碼,都是明文傳送的。Telnet 在 SSH 被開發出來之後就基本棄用了。

登入遠端伺服器,你可能不會也從未考慮過它。但這並不意味著 telnet 命令在除錯遠端連線問題時不是一個實用的工具。

本教程中,我們將探索使用 telnet 解決所有常見問題:“我怎麼又連不上啦?”

這種討厭的問題通常會在安裝了像 Web伺服器、郵件伺服器、ssh 伺服器、Samba 伺服器等諸如此類的事之後遇到,使用者無法連線伺服器。

telnet 不會解決問題但可以很快縮小問題的範圍。

telnet 用來除錯網路問題的簡單命令和語法:

  1. telnet <hostname or IP> <port>

因為 telnet 最初透過埠建立連線不會傳送任何資料,適用於任何協議,包括加密協議。

連線問題伺服器有四個可能會遇到的主要問題。我們會研究這四個問題,研究它們意味著什麼以及如何解決。

本教程預設已經在 samba.example.com 安裝了 Samba[1] 伺服器而且本地客戶無法連上伺服器。

Error 1 – 連線掛起

首先,我們需要試著用 telnet 連線 Samba 伺服器。使用下列命令 (Samba 監聽埠445):

  1. telnet samba.example.com 445

有時連線會莫名停止:

  1. telnet samba.example.com 445

  2. Trying 172.31.25.31...

這意味著 telnet 沒有收到任何回應來建立連線。有兩個可能的原因:

☉ 你和伺服器之間有個路由器宕掉了。
☉ 防火牆攔截了你的請求。

為了排除第 1 點,對伺服器上進行一個快速 mtr samba.example.com[2] 。如果伺服器是可達的,那麼便是防火牆(註意:防火牆總是存在的)。

首先用 iptables -L -v -n 命令檢查伺服器本身有沒有防火牆,沒有的話你能看到以下內容:

  1. iptables -L -v -n

  2. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

  3. pkts bytes target prot opt in out source destination

  4. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

  5. pkts bytes target prot opt in out source destination

  6. Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

  7. pkts bytes target prot opt in out source destination

如果你看到其他東西那可能就是問題所在了。為了檢驗,停止 iptables 一下並再次執行 telnet samba.example.com 445 看看你是否能連線。如果你還是不能連線看看你的提供商或企業有沒有防火牆攔截你。

Error 2 - DNS 問題

DNS 問題通常發生在你正使用的主機名沒有解析到 IP 地址。錯誤如下:

  1. telnet samba.example.com 445

  2. Server lookup failure: samba.example.com:445, Name or service not known

第一步是把主機名替換成伺服器的 IP 地址。如果你可以連上那麼就是主機名的問題。

有很多發生的原因(以下是我見過的):

☉ 域名註冊了嗎?用 whois 來檢驗。
☉ 域名過期了嗎?用 whois 來檢驗。
☉ 是否使用正確的主機名?用 dig 或 host 來確保你使用的主機名解析到正確的 IP。
☉ 你的 A 記錄正確嗎?確保你沒有偶然建立類似 smaba.example.com 的 A 記錄。

一定要多檢查幾次拼寫和主機名是否正確(是 samba.example.com 還是 samba1.example.com)?這些經常會困擾你,特別是比較長、難記或其它國家的主機名。

Error 3 - 伺服器沒有偵聽埠

這種錯誤發生在 telnet 可達伺服器但是指定埠沒有監聽。就像這樣:

  1. telnet samba.example.com 445

  2. Trying 172.31.25.31...

  3. telnet: Unable to connect to remote host: Connection refused

有這些原因:

☉ 你 確定 連線的是正確的伺服器?
☉ 你的應用伺服器沒有偵聽預期的埠。在伺服器上執行 netstat -plunt 來檢視它究竟在乾什麼並看哪個端口才是對的,實際正在監聽中的。
☉ 應用伺服器沒有執行。這可能突然而又悄悄地發生在你啟動應用伺服器之後。啟動伺服器執行 ps auxf 或 systemctl status application.service 檢視執行。

Error 4 - 連線被伺服器關閉

這種錯誤發生在連線成功建立但是應用伺服器建立的安全措施一連上就將其結束。錯誤如下:

  1. telnet samba.example.com 445

  2. Trying 172.31.25.31...

  3. Connected to samba.example.com.

  4. Escape character is '^]'.

  5. Connection closed by foreign host.

最後一行 Connection closed by foreign host. 意味著連線被伺服器主動終止。為了修複這個問題,需要看看應用伺服器的安全設定確保你的 IP 或使用者允許連線。

成功連線

成功的 telnet 連線如下:

  1. telnet samba.example.com 445

  2. Trying 172.31.25.31...

  3. Connected to samba.example.com.

  4. Escape character is '^]'.

連線會保持一段時間只要你連線的應用伺服器時限沒到。

輸入 CTRL+] 中止連線,然後當你看到 telnet> 提示,輸入 quit 並按回車:

  1. telnet samba.example.com 445

  2. Trying 172.31.25.31...

  3. Connected to samba.example.com.

  4. Escape character is '^]'.

  5. ^]

  6. telnet> quit

  7. Connection closed.

總結

客戶程式連不上伺服器的原因有很多。確切原因很難確定,特別是當客戶是圖形使用者介面提供很少或沒有錯誤資訊。用 telnet 並觀察輸出可以讓你很快確定問題所在節約很多時間。


via: https://bash-prompt.net/guides/telnet/

作者:Elliot Cooper[4] 譯者:XYenChi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

XYenChi ? ?
共計翻譯:9 篇
貢獻時間:301 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖