GCP帳號充值 修復谷歌雲SSH連接超時
SSH連接超時?別慌,先冷靜下來
GCP帳號充值 當你輸入ssh user@ip後,屏幕卡住不動,或者彈出"Connection timed out",是不是恨不得把鍵盤砸了?別急,這只是谷歌雲在跟你玩捉迷藏。讓我們一步一步揪出問題根源,順便學點雲端小知識。
第一關:防火牆規則——守門員的失職
谷歌雲的防火牆規則就像守門員,如果沒讓SSH(22端口)進場,連接當然會超時。檢查方法:
- 打開VPC防火牆規則
- 找是否有允許TCP 22的規則,來源IP通常填
0.0.0.0/0(測試用)或你的IP - 如果沒有,點「建立防火牆規則」,設置方向為入站,目標為所有實例,協議為TCP,端口22
但要注意:公開允許22端口有安全風險,建議限制IP範圍,比如你的IP/32。如果不知道IP,可以上WhatIsMyIP查。點擊左側選單的「VPC網路」→「防火牆規則」,找到規則列表。如果沒有相關規則,點擊「建立防火牆規則」。在名稱欄填入比如allow-ssh,方向選擇「入站」,目標選擇「所有實例」,來源IP範圍填你的IP地址/32(或0.0.0.0/0測試),協議和端口選擇「tcp:22」。保存後,等1-2分鐘讓規則生效,再試SSH連接。別忘了,防火牆規則生效通常很快,但有時需要幾分鐘才完全同步,所以別急著罵街。
第二關:SSH服務沒開——實例在睡覺?
有時候實例啟動後,SSH服務沒自動啟動。怎麼辦?用串列控制台!
- 在Google Cloud Console,點擊實例名稱,選「串列控制台 1」
- 等幾秒鐘,出現命令提示符後,輸入
sudo systemctl status sshd(Ubuntu/Debian)或sudo systemctl status ssh(部分系統) - 如果狀態是
inactive,輸入sudo systemctl start sshd啟動服務
如果服務啟動失敗,看日誌:sudo journalctl -u sshd -b。常見錯誤可能是密鑰文件權限問題,或者配置文件寫錯。例如,如果sshd_config文件裡有語法錯誤,服務會啟動失敗。可以用sudo sshd -t測試配置文件是否正確。另外,Debian系系統(如Ubuntu)通常用ssh服務名,而Red Hat系(如CentOS)用sshd。如果實例是從頭安裝的,可能沒安裝openssh-server!用sudo apt install openssh-server(Debian)或sudo yum install openssh-server(CentOS)安裝。
第三關:IP地址與實例狀態
實例是否真的在運行?點進去看看狀態。如果顯示「已停止」,先啟動實例再試。另外,檢查外部IP是否正確:有的實例設置為「暫時性IP」,重啟後IP會變,導致你連錯地址。建議設置靜態外部IP(在實例設置裡勾選「保留」)。
用gcloud compute instances describe [實例名] --zone=[區域]查看詳細資訊,確認external-ip欄位有正確IP。如果IP變了,可以去VPC網路→外部IP地址,把原IP設為靜態。或者直接在實例編輯頁,點擊外部IP旁的下拉選單,選擇「保留」,然後保存。這樣下次重啟也不怕IP變了。記住,靜態IP不是免費的,但為了穩定連接,值得花這幾毛錢!
第四關:SSH密鑰大亂鬥
密鑰錯誤是最常見的「看得到吃不到」問題。本地私鑰和實例上的公鑰必須匹配。檢查步驟:
- 確認本地私鑰文件權限正確:
chmod 600 ~/.ssh/id_rsa - GCP帳號充值 檢查公鑰是否已添加到實例metadata:在Google Cloud Console,點擊實例,點擊「編輯」,找到「SSH金鑰」欄位,看是否有你的公鑰。格式應為
ssh-rsa AAAAB3NzaC1yc2E... user@machine - 如果沒有的話,點擊「新增項目」,將公鑰內容貼上(注意不要有多餘空格)
另外,用ssh -i ~/.ssh/id_rsa user@ip連接時,確保-i參數指向正確的私鑰文件。如果用gcloud compute ssh,會自動處理密鑰,但要注意gcloud是否配置正確。別傻傻地用root連接,很多雲端系統預設帳號是ubuntu、centos或ec2-user。例如,Google Cloud的Ubuntu實例預設帳號是ubuntu,CentOS是centos,Debian是debian。用錯帳號?連接會直接拒絕,別怪SSH不給面子!
如果你沒私鑰,可以用ssh-keygen -t rsa生成一對新密鑰,默認保存在~/.ssh/id_rsa。然後用cat ~/.ssh/id_rsa.pub複製公鑰內容,添加到實例metadata中。記住:密鑰文件權限太松(比如644)會被SSH拒絕,一定要用600!
進階排查:當以上都沒問題……
本地網路防火牆攔截
有時候問題不在谷歌雲,而在你的電腦或公司網路。例如:公司防火牆攔截22端口,或者你的本地防火牆設定。可以用以下方式測試:
- 用
telnet ip 22(Windows可能需要啟用telnet客戶端)或nc -zv ip 22測試端口是否開放。如果無法連接,可能是本地網路問題。 - 嘗試切換網路:用手機熱點連接,看是否能SSH。如果可以,就是公司網路限制。
如果你在公司網路,可能需要聯繫IT部門放行22端口。或者,把SSH端口改為其他常用端口(比如443),繞過公司限制。修改/etc/ssh/sshd_config中的Port為443,重啟服務後,連接時用ssh -p 443 user@ip。注意:防火牆規則也要同時開放443端口。這樣即使公司攔截22,也能從443順利通過——畢竟443是HTTPS的標準端口,防火牆通常不會攔。
系統資源不足導致延遲
如果實例CPU或記憶體滿載,SSH可能會反應遲緩甚至超時。檢查實例的CPU使用率:在Google Cloud Console,點擊實例,查看「CPU使用率」圖表。如果長期100%,可能需要升級機型或優化應用。可以先用串列控制台,輸入top或htop(如果安裝了)查看資源占用。如果是CPU過高,考慮關閉非必要服務,或升級實例規格。記住:雲端資源就像你的健身房,太過拼命反而會累垮!
例如,某次我遇到實例CPU飆到100%,連串列控制台都卡住。用top一看,原來是某個死循環腳本在瘋狂運行。殺掉進程後瞬間恢復。這時候別慌,先用串列控制台搶救,再慢慢找問題根源。
SSH配置文件錯誤
實例上的/etc/ssh/sshd_config文件可能被修改過,導致SSH服務異常。例如:Port設置了非22端口,或者允許的用戶名限制。用串列控制台檢查此文件,確認關鍵設定:
Port 22
PermitRootLogin yes(或根據需求設置)
PasswordAuthentication yes(如果用密碼登錄)
修改後重啟服務:sudo systemctl restart sshd。如果改錯了配置,可以用sudo sshd -t測試,正確才重啟。萬一改崩了,可以備份原文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,這樣有退路。
曾經有個同事把PermitRootLogin設成no,結果自己忘記加普通帳號,連都連不上。緊急情況下,只能用串列控制台去改配置。所以建議:修改配置前先備份,改完用-t測試再重啟,這樣才不會「救火不成反燒房」。
小貼士:預防勝於治療
- 定期備份SSH密鑰,並設置強密碼。密鑰丟失?雲端實例就變成「鐵牢籠」了!
- 為重要實例設置靜態IP,避免IP變動。誰也不想每次重啟都要重新記IP,那樣太麻煩。
- 使用Google Cloud的OS Login功能,簡化密鑰管理。這功能讓你不用手動管理公鑰,直接用IAM權限控制,安全又方便。
- 設置監控告警,當CPU或記憶體過高時通知你。就像給雲端實例裝個「健康監測儀」,有問題第一時間知道。
記住:雲端服務就像養寵物,平時多關心,故障時才不會手忙腳亂。下次SSH超時時,別急著罵街,先冷靜按步驟檢查,你會發現解決問題比預期簡單多了!
最後,如果所有方法都試過還是不行,別猶豫,直接聯繫Google Cloud支持。他們的專家團隊會幫你排查更深層問題。但在此之前,先確保自己做過所有基礎檢查——畢竟專業支持也是要收費的,別浪費他們的時間!」

