前言
當使用云服務器(如阿里云、騰訊云、AWS 等)時,嘗試在本地PC端使用圖形化工具如 FinalShell、XShell可能會遇到 SSH 連接失敗的問題。本文列舉 SSH 連接失敗的常見原因,并提供對應解決方案,幫助快速定位并解決問題。
一、問題現象
- 使用 FinalShell、XShell等工具連接云服務器失敗
- 報錯信息如:
Permission denied (publickey,password)
Can't connect to SOCKS proxy: Connection refused
Connection refused
No route to host
- 云服務器已配置安全組放行 22 端口,但仍然無法連接
二、排查流程
1. 檢查云服務器安全組是否放行 22 端口↓
2. 檢查服務器 SSH 服務是否運行正常↓
3. 在本地終端使用 SSH 命令測試連接↓
4. 信任服務器指紋(known_hosts)↓
5. 再次使用圖形工具連接
三、詳細排查步驟
? 步驟 1:確認云服務器安全組是否放行 22 端口
為什么重要?
云服務器默認不會開放所有端口,你需要手動配置安全組規則,允許外部訪問 SSH 端口(默認是 22)。
如何操作(以阿里云為例):
- 登錄阿里云控制臺
- 找到你的輕量應用服務器或 ECS 實例
- 進入“防火墻”或“安全組”頁面
- 添加入站規則:
- 協議類型:TCP
- 端口范圍:22
- 授權對象(源IP):0.0.0.0/0(允許所有IP)或你本地的公網IP
? 步驟 2:確認服務器上的 SSH 服務是否運行
為什么重要?
即使你放行了 22 端口,如果服務器上的 SSH 服務沒啟動,也無法連接。
如何操作:
- 使用阿里云控制臺提供的“遠程連接”(如Workbench)登錄服務器
- 執行命令查看 SSH 狀態:
sudo systemctl status sshd
# 或
sudo service ssh status
- 如果未運行,啟動 SSH 服務:
sudo systemctl start sshd
sudo systemctl enable sshd
? 步驟 3:在本地終端使用 SSH 命令測試連接
為什么重要?
圖形化工具(如 FinalShell)可能會隱藏底層的 SSH 交互細節,使用命令行可以更清晰地看到報錯信息。
操作命令:
ssh username@your_server_ip
例如:
ssh root@139.155.88.173
可能提示:
The authenticity of host '139.155.88.173 (139.155.88.173)' can't be established.
***** key fingerprint is ******:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
這是 SSH 的主機指紋驗證機制,防止中間人攻擊。
解決方法:
輸入:
yes
系統會將服務器的指紋記錄到本地:
~/.ssh/known_hosts
此時,服務器的指紋已被信任。
? 步驟 4:再次使用圖形工具連接(如 FinalShell)
為什么現在可以連接了?
因為:
- 命令行工具將服務器指紋寫入了
~/.ssh/known_hosts
- FinalShell、Xshell 等圖形工具默認使用系統 SSH 配置和密鑰
- 所以現在它“知道”這個服務器是可信的,就可以正常連接了
四、常見問題補充
?1. 為什么信任指紋后 FinalShell 就可以連接了?
FinalShell 等工具默認不會自動信任新服務器的公鑰指紋,所以首次連接時會失敗。但當你通過命令行信任了服務器后,FinalShell 會讀取 .ssh/known_hosts
文件,發現該服務器已被信任,于是連接成功。
?2. 如果服務器更換了 IP 或重裝系統怎么辦?
SSH 會檢測到指紋不一致,提示如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
這說明服務器的 SSH 主機密鑰已變更,可能是:
- 服務器重裝系統
- 服務器更換了主機密鑰
- 中間人攻擊(極少見)
解決辦法:
手動刪除 .ssh/known_hosts
中對應的服務器記錄:
ssh-keygen -R 139.155.88.173
然后再重新連接即可。
?3. 如何查看 .ssh/known_hosts
文件?
cat ~/.ssh/known_hosts
每行代表一個已信任的服務器指紋。
? 五、總結:SSH 連接失敗排查清單
檢查項 | 是否完成 | 說明 |
---|---|---|
云服務器安全組是否放行 22 端口 | ? | 阿里云、騰訊云等需手動配置 |
服務器 SSH 服務是否運行 | ? | 通過 遠程連接 登錄檢查 |
本地終端是否信任服務器指紋 | ? | 使用 ssh 命令并輸入 yes |
圖形工具是否讀取 .ssh/known_hosts | ? | FinalShell 等默認使用系統配置 |
用戶名和密碼是否正確 | ? | Linux 區分大小寫,注意默認用戶 |
是否配置了錯誤的代理 | ? | FinalShell 可能啟用了 SOCKS 代理 |
📌 六、附錄:常用命令匯總
# 測試端口是否通
telnet 139.155.88.173 22
nc -zv 139.155.88.173 22# SSH 連接服務器
ssh username@139.155.88.173# 查看 known_hosts 文件
cat ~/.ssh/known_hosts