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

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)

分享創造快樂

© 2021 知識星球   网站地图