我正在嘗試使用 OpenSSH 在本機電腦上設定 SSH 伺服器。當我嘗試從遠端主機透過 SSH 連接到本機 SSH 伺服器時,SSH 伺服器沒有回應並且請求逾時。我很確定有一個非常明顯的解決方案可以解決這個問題,但我只是忽略了。
當我嘗試從遠端主機透過 SSH 登入時,會發生以下情況:
yoshimi@robots:/$ ssh -vv [email protected]
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 99.3.26.94 [99.3.26.94] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: connect to address 99.3.26.94 port 22: Connection timed out
ssh: connect to host 99.3.26.94 port 22: Connection timed out
我的遠端主機在哪裡robots
,99.3.26.94
我的本機 SSH 伺服器在哪裡。
SSH 正在運行
volt@arnold:~$ ps -A | grep sshd
5784 ? 00:00:00 sshd
arnold
我的本地 SSH 伺服器在哪裡?
路由器上設定連接埠轉發
我已將家庭路由器設定為將連接埠 80 和 22 轉送到我的 SSH 伺服器。有趣的是,連接埠 80 運行順利——直接進入 Apache Web 目錄。埠 22——沒那麼多。
NMap 說它已被過濾
yoshimi@robots:/$ nmap -p 22 99.3.26.94
Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-02 14:45 EDT
Nmap scan report for 99-3-26-94.lightspeed.bcvloh.sbcglobal.net (99.3.26.94)
Host is up (0.33s latency).
PORT STATE SERVICE
22/tcp filtered ssh
Nmap done: 1 IP address (1 host up) scanned in 7.59 seconds
我的遠端主機在哪裡robots
,99.3.26.94
我的本機 SSH 伺服器在哪裡。
這不是 IPTables(我認為)
volt@arnold:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
……而且我沒有安裝任何其他防火牆——這是一個相對較新的 Debian netinst。
那麼,那麼:還能是什麼?它確實看起來像是防火牆之類的東西,只是忽略流量,但如果它不是路由器,它不是 iptables,也不是 SSH 伺服器上的另一個防火牆,...還有什麼?
編輯:NetStat 伺服器輸出
從 SSH 伺服器:
tcp6 0 0 :::22 :::* LISTEN 5784/sshd
答案1
非常令人失望的自我回答
把這個問題擱置一天,然後再回來解決這個問題,我既鬆了一口氣,又感到不安(更多的是不安而不是如釋重負),我發現一切都神秘地正常工作。
那麼,問題是什麼?
沒有更改或調整任何設定——路由器上、SSH 伺服器上以及 SSH 用戶端電腦上都沒有。可以相當肯定地說,儘管設定正確,但路由器未能正確處理傳入流量。鑑於小型家庭路由器軟體不是真的設計用於處理端口轉發,這個可憐的傢伙花了一段時間才實施必要的更改。
但已經過了 6 個小時!
是的,夥計,我知道。我花了一整天的時間試圖找出問題所在,但始終沒有找到,因為不是哪裡不對了。顯然,路由器設定可能需要 6 小時(可能更長)才能生效。
那我如何知道這是否是我的問題?
我在這次冒險中遇到的一個很棒的工具是tcpdump
.這個瘦小的傢伙會為您嗅探流量,為您提供有關實際情況的寶貴見解。另外,他還有一些超級過濾功能,可以讓你精確地縮小你想要查看/尋找的內容。例如,命令:
tcpdump -i wlan1 port 22 -n -Q inout
指示透過 wlan1 介面( =“介面”)來tcpdump
尋找流量,僅透過連接埠 22,忽略 DNS 名稱解析( =“無名稱解析”),並且我們希望查看傳入和傳出流量(接受、或;是預設值) 。-i
-n
-Q
in
out
inout
inout
透過在 SSH 伺服器上執行此命令,同時嘗試透過遠端電腦連接,很快就會清楚問題所在。本質上有3種可能性:
- 如果你看到傳入來自遠端機器的流量,但是沒有傳出來自本機伺服器的流量,問題出在伺服器:可能需要更改防火牆規則等。
- 如果你看到傳入和傳出,但您的遠端電腦沒有收到回應,它很可能是路由器:它允許傳入流量,但丟棄傳出封包。
- 如果有根本沒有交通,這也可能是路由器問題:遠端電腦的
SYN
封包在到達您的伺服器之前就被路由器忽略並丟棄。
一旦發現問題所在,修復(通常)就很簡單了。