Telnet,愛一直在
Telnet,是系統管理員登錄遠程伺服器的一種協議和工具。然而,由於所有的通信都沒有加密,包括密碼,都是明文發送的。Telnet 在 SSH 被開發出來之後就基本棄用了。
登錄遠程伺服器,你可能不會也從未考慮過它。但這並不意味著 telnet
命令在調試遠程連接問題時不是一個實用的工具。
本教程中,我們將探索使用 telnet
解決所有常見問題:「我怎麼又連不上啦?」
這種討厭的問題通常會在安裝了像 Web伺服器、郵件伺服器、ssh 伺服器、Samba 伺服器等諸如此類的事之後遇到,用戶無法連接伺服器。
telnet
不會解決問題但可以很快縮小問題的範圍。
telnet
用來調試網路問題的簡單命令和語法:
telnet <hostname or IP> <port>
因為 telnet
最初通過埠建立連接不會發送任何數據,適用於任何協議,包括加密協議。
連接問題伺服器有四個可能會遇到的主要問題。我們會研究這四個問題,研究它們意味著什麼以及如何解決。
本教程默認已經在 samba.example.com
安裝了 Samba 伺服器而且本地客戶無法連上伺服器。
Error 1 - 連接掛起
首先,我們需要試著用 telnet
連接 Samba 伺服器。使用下列命令 (Samba 監聽埠445):
telnet samba.example.com 445
有時連接會莫名停止:
telnet samba.example.com 445
Trying 172.31.25.31...
這意味著 telnet
沒有收到任何回應來建立連接。有兩個可能的原因:
- 你和伺服器之間有個路由器宕掉了。
- 防火牆攔截了你的請求。
為了排除第 1 點,對伺服器上進行一個快速 mtr samba.example.com
。如果伺服器是可達的,那麼便是防火牆(注意:防火牆總是存在的)。
首先用 iptables -L -v -n
命令檢查伺服器本身有沒有防火牆,沒有的話你能看到以下內容:
iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
如果你看到其他東西那可能就是問題所在了。為了檢驗,停止 iptables
一下並再次運行 telnet samba.example.com 445
看看你是否能連接。如果你還是不能連接看看你的提供商或企業有沒有防火牆攔截你。
Error 2 - DNS 問題
DNS 問題通常發生在你正使用的主機名沒有解析到 IP 地址。錯誤如下:
telnet samba.example.com 445
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
可達伺服器但是指定埠沒有監聽。就像這樣:
telnet samba.example.com 445
Trying 172.31.25.31...
telnet: Unable to connect to remote host: Connection refused
有這些原因:
- 你 確定 連接的是正確的伺服器?
- 你的應用伺服器沒有偵聽預期的埠。在伺服器上運行
netstat -plunt
來查看它究竟在幹什麼並看哪個埠才是對的,實際正在監聽中的。 - 應用伺服器沒有運行。這可能突然而又悄悄地發生在你啟動應用伺服器之後。啟動伺服器運行
ps auxf
或systemctl status application.service
查看運行。
Error 4 - 連接被伺服器關閉
這種錯誤發生在連接成功建立但是應用伺服器建立的安全措施一連上就將其結束。錯誤如下:
telnet samba.example.com 445
Trying 172.31.25.31...
Connected to samba.example.com.
Escape character is '^]'.
Connection closed by foreign host.
最後一行 Connection closed by foreign host.
意味著連接被伺服器主動終止。為了修復這個問題,需要看看應用伺服器的安全設置確保你的 IP 或用戶允許連接。
成功連接
成功的 telnet
連接如下:
telnet samba.example.com 445
Trying 172.31.25.31...
Connected to samba.example.com.
Escape character is '^]'.
連接會保持一段時間只要你連接的應用伺服器時限沒到。
輸入 CTRL+]
中止連接,然後當你看到 telnet>
提示,輸入 quit
並按回車:
telnet samba.example.com 445
Trying 172.31.25.31...
Connected to samba.example.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
總結
客戶程序連不上伺服器的原因有很多。確切原因很難確定,特別是當客戶是圖形用戶界面提供很少或沒有錯誤信息。用 telnet
並觀察輸出可以讓你很快確定問題所在節約很多時間。
via: https://bash-prompt.net/guides/telnet/
作者:Elliot Cooper 譯者:XYenChi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive