當遇到無法 SSH 的時候,有哪些方式可以做初步的問題排解呢?
情境
我們常會遇到客戶表示機器突然無法 SSH,以下統整了一些常見的狀況以及解決方式。這些方式未必能完全解決問題,但能夠讓大家做初步的問題排解,以縮小後續排查範圍。
操作
方法 1. 檢查防火牆規則有沒有開放 22 port 和 network tag 是否正確
方法 2. 檢查 VM 的 CPU / RAM 使用率。一般來說,CPU 使用率達到 80-90% 時,容易造成 VM 太忙無法回應。
如果 CPU 使用率太高,建議先調整 VM 內可能造成 CPU 使用率過高的程式,或是重啟 instance,等 CPU 使用率下降之後再嘗試連線。
方法 3. 檢查 Disk 使用量是否滿載。如果滿載的話,會在 Serial port 1 出現 OSError: [Errno 28] No space left on device 這個 Log。
方法 4. 檢查無法 SSH 時是用什麼方式連入 VM 的?以及檢查客戶端使用的 key 是否正確。通常在 VM 上配置正確的 SSH key 後就會解決此問題。
方法 5. 檢查是否有啟用 OS login,限制特定使用者才能夠登入,並檢查 VM 使用的 OS 版本是否過於陳舊。
- 這邊需要注意的 roles 權限如下:
- compute.osLoginExternalUser (若當前專案有 organization 時要邀請不同 organization 的使用者)
- compute.osAdminLogin (OS login admin root)
- compute.osLogin (一般 OS login)
- 查看是否啟用 OS login 功能:前往 GCP console > Compute Engine > Metadata 設定為 enable-oslogin: TRUE
方法 6. 檢查 Identity-Aware Proxy (IAP) 設定是否正確。
- IAP-secured Tunnel User 權限
- Firewall rules IP range 為 35.235.240.0/20
方法 7. 檢查是否可以透過 GCP Console 登入,並啟用 Serial Console 查看錯誤訊息。
方法 8. 檢查 ssh session 是否建立成功以及 sshd 服務是否正常運行。同時檢查 TCP session 數量。