問題描述:
系統是ubuntu20.04,使用filezilla,兩個主機之間能夠ping通,但是filezilla使用sftp連接的時候顯示的是
FATAL ERROR: Connection refused
Could connect to the server
應該如何排查問題呢
這是一個非常典型的SFTP連接問題。“Connection refused” (連接被拒絕) 是一個非常明確的錯誤信息,它和“Connection timed out”(連接超時) 或 “Host unreachable”(主機不可達) 是完全不同的。
“Connection refused”的核心含義是:你的FileZilla客戶端發出的連接請求已經成功到達了服務器的IP地址,但是服務器操作系統主動拒絕了這個連接。
既然ping
是通的,說明網絡底層是連通的。問題出在應用層,也就是SSH服務本身。
請按照以下步驟,從最可能的原因開始逐一排查服務器(也就是你希望連接上的那臺Ubuntu主機)。
排查步驟
第一步:檢查服務器上的SSH服務是否已安裝并正在運行
這是最常見的原因,尤其是在一個新安裝的Ubuntu桌面系統上,SSH服務默認可能沒有安裝。
-
登錄到你的Ubuntu服務器 (通過物理鍵盤、VNC、或者其他已經可以連接的方式)。
-
檢查SSH服務的狀態,在終端中輸入以下命令:
sudo systemctl status sshd
或者有時候服務名叫
ssh
:sudo systemctl status ssh
-
分析命令輸出:
-
正常情況(服務正在運行):你會看到綠色的
active (running)
字樣。 -
如果服務正在運行,請直接跳到 第二步。 -
異常情況1(服務未運行):你可能會看到
inactive (dead)
。
解決方法:啟動SSH服務,并設置為開機自啟。sudo systemctl start ssh sudo systemctl enable ssh
然后再試一次FileZilla連接。
-
異常情況2(服務未安裝):你可能會看到
Unit ssh.service could not be found.
或類似的錯誤。
解決方法:安裝openssh-server
。sudo apt update sudo apt install openssh-server
安裝完成后,SSH服務通常會自動啟動。你可以用第一條
systemctl status ssh
命令再次檢查。
-
第二步:檢查服務器防火墻設置
如果SSH服務正在運行,但連接依然被拒絕,第二大可能性就是防火墻。Ubuntu默認使用 ufw
(Uncomplicated Firewall)。
-
檢查防火墻狀態:
sudo ufw status
-
分析命令輸出:
-
如果輸出是
Status: inactive
:說明防火墻未開啟,這不是問題的原因,請跳到 第三步。 -
如果輸出是
Status: active
:你需要檢查規則列表,看看是否允許了SSH連接(默認端口22)。Status: activeTo Action From -- ------ ---- 22/tcp ALLOW Anywhere <-- 需要看到類似這行 OpenSSH ALLOW Anywhere <-- 或者這行 22/tcp (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6)
解決方法:如果列表中沒有允許
22/tcp
或OpenSSH
的規則,請添加它:sudo ufw allow ssh
或者,如果你知道SSH使用的是標準端口22:
sudo ufw allow 22/tcp
添加規則后,無需
reload
或restart
ufw。現在再試一次FileZilla連接。
-
第三步:確認SSH服務的監聽端口
雖然不常見,但有些服務器為了安全會修改SSH的默認端口(從22修改為其他端口)。
-
檢查SSH正在監聽的端口:
sudo ss -tlpn | grep sshd
ss
是一個現代的網絡套接字查看工具,比netstat
更快。
-
分析命令輸出:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))
- 請注意
LISTEN
狀態后面跟著的地址和端口。0.0.0.0:22
表示在所有IPv4地址的22端口上監聽。 - 如果這里顯示的端口不是22(例如是
2222
),那么你在FileZilla連接時,必須在“端口§”字段明確填寫這個新的端口號。
- 請注意
-
如果需要修改端口:可以編輯SSH配置文件
sudo nano /etc/ssh/sshd_config
,找到Port 22
這一行,修改為你想要的端口,然后重啟SSH服務sudo systemctl restart ssh
。同時別忘了在防火墻里允許新端口。
第四步:檢查客戶端(FileZilla)的設置
回到你自己的電腦上,檢查FileZilla的設置是否正確。
- 協議(Protocol):確保主機名前綴是
sftp://
,例如sftp://192.168.1.100
。千萬不要錯選成ftp://
。SFTP (SSH File Transfer Protocol) 和 FTP 是完全不同的協議。 - 主機(Host):確認服務器的IP地址或域名輸入正確。
- 端口(Port):
- 如果服務器使用標準端口22,此項可以留空。
- 如果服務器使用了非標準端口(如第三步中查到的),必須在此處填寫正確的端口號。
- 用戶名(Username)/密碼(Password):確保你使用的是服務器上一個真實存在的用戶的憑據。
第五步:使用命令行工具進行最終測試
為了排除是FileZilla本身的問題,可以在你的客戶端電腦的終端(如果是Windows,可以使用CMD或PowerShell)上使用原生的sftp
命令進行測試。
-
打開你電腦的終端。
-
輸入命令:
# 如果服務器是標準22端口 sftp your_username@server_ip_address# 如果服務器是自定義端口,例如2222 sftp -P 2222 your_username@server_ip_address
- 將
your_username
和server_ip_address
替換為你的實際信息。 - 注意:
sftp
命令用大寫的-P
指定端口,而ssh
命令用小寫的-p
。
- 將
-
觀察結果:
- 如果命令行也返回
Connection refused
,那么問題100%在服務器端,請重新仔細檢查第一、二、三步。 - 如果命令行能夠成功連接(會提示你輸入密碼),但FileZilla不行,那問題就在FileZilla的配置上,請仔細檢查第四步。
- 如果命令行也返回
總結排查流程
- 服務器:SSH服務裝了嗎?
sudo apt install openssh-server
- 服務器:SSH服務運行了嗎?
sudo systemctl status ssh
-> 不行就sudo systemctl start ssh
- 服務器:防火墻擋了嗎?
sudo ufw status
-> 如果active,就sudo ufw allow ssh
- 服務器:端口對嗎?
sudo ss -tlpn | grep sshd
-> 確認端口號 - 客戶端:FileZilla里協議、主機、端口、用戶名填對了嗎?特別是
sftp://
協議和端口號。
按照這個順序排查,基本上都能解決“Connection refused”的問題。