作者 | Elliot Cooper
譯者 | XYenChi
Telnet,是系統管理員登入遠端伺服器的一種協議和工具。然而,由於所有的通訊都沒有加密,包括密碼,都是明文傳送的。Telnet 在 SSH 被開發出來之後就基本棄用了。
登入遠端伺服器,你可能不會也從未考慮過它。但這並不意味著 telnet
命令在除錯遠端連線問題時不是一個實用的工具。
本教程中,我們將探索使用 telnet
解決所有常見問題:“我怎麼又連不上啦?”
這種討厭的問題通常會在安裝了像 Web伺服器、郵件伺服器、ssh 伺服器、Samba 伺服器等諸如此類的事之後遇到,使用者無法連線伺服器。
telnet
不會解決問題但可以很快縮小問題的範圍。
telnet
用來除錯網路問題的簡單命令和語法:
telnet <hostname or IP> <port>
因為 telnet
最初透過埠建立連線不會傳送任何資料,適用於任何協議,包括加密協議。
連線問題伺服器有四個可能會遇到的主要問題。我們會研究這四個問題,研究它們意味著什麼以及如何解決。
本教程預設已經在 samba.example.com
安裝了 Samba[1] 伺服器而且本地客戶無法連上伺服器。
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
[2] 。如果伺服器是可達的,那麼便是防火牆(註意:防火牆總是存在的)。
首先用 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。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[4] 譯者:XYenChi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出