為什麼我在使用瀏覽器型 SSH 主控台存取 Lightsail 執行個體時,會收到錯誤 UPSTREAM_ERROR、UPSTREAM_NOT_FOUND 或 CLIENT_UNAUTHORIZED?

3 分的閱讀內容
0

當我使用以瀏覽器為基礎的 SSH 主控台連線到 Amazon Lightsail 執行個體時,收到 UPSTREAM_ERROR [515]、UPSTREAM_NOT_FOUND [519] 或 CLIENT_UNAUTHORIZED [769] 訊息。 如何對這些錯誤進行疑難排解?

簡短描述

如果您在連線至 Lightsail 執行個體時收到錯誤訊息,且錯誤與 SSH 有關,則您可能會看到下列其中一則訊息:

  • "Your instance encountered an error and has closed the connection. Try again or contact customer support. UPSTREAM_ERROR [515] (您的執行個體發生錯誤,並已關閉連線。請再試一次,或聯絡客戶支援。UPSTREAM_ERROR [515])"
  • "An error occurred and we were unable to connect or stay connected to your instance. If this instance has just started up, try again in a minute or two. UPSTREAM_NOT_FOUND [519] (發生錯誤,我們無法與您的執行個體建立連線或保持連線。如果此執行個體才剛啟動,請在一兩分鐘後再試一次。UPSTREAM_NOT_FOUND [519])"
  • "Login failed. If this instance has just started up, try again in a minute or two. CLIENT_UNAUTHORIZED [769] (登入失敗。如果此執行個體才剛啟動,請在一兩分鐘後再試一次。CLIENT_UNAUTHORIZED [769])"

UPSTREAM_ERROR [515]UPSTREAM_NOT_FOUND [519] 錯誤表示,在使用 SSH 時,無法連線到您的 Lightsail 執行個體。造成這些錯誤的常見原因如下:

  • 執行個體啟動失敗、執行個體狀態檢查失敗,或執行個體上的資源使用過度。
  • 作業系統層級的防火牆封鎖 SSH 連接埠的存取。
  • 預設 SSH 連接埠 (22) 變更為其他連接埠。
  • SSH 服務已關閉。

CLIENT_UNAUTHORIZED [769] 錯誤表示您的 Lightsail 執行個體有 SSH 身分驗證問題。造成此錯誤的常見原因如下:

  • /etc/ssh/lightsail_instance_ca.pub 中的 Lightsail 系統金鑰組態錯誤。
  • 您已將 Ubuntu 執行個體從舊版升級到 20.04 或更新版本。

解決方案

執行個體啟動失敗、執行個體狀態檢查失敗,或執行個體上的資源使用過度

檢視執行個體的狀態檢查指標,以判斷執行個體未能通過系統狀態檢查還是執行個體狀態檢查。

系統狀態檢查

如果系統狀態檢查失敗,則表示執行個體的基礎硬體有問題。若要修正此問題,請先停止再重新啟動執行個體。這會將執行個體移轉到狀況良好的硬體。

**警告:**請注意,執行個體每次停止和啟動時,其公有 IP 地址都會改變。如果您希望執行個體每次停止和啟動時,其 IP 地址都不會改變,請連接靜態 IP 地址

執行個體狀態檢查

如果執行個體狀態檢查失敗,則可能是作業系統層級的問題造成開機錯誤的。或者,執行個體的資源 (例如 CPU 或記憶體) 可能使用過度。如需疑難排解步驟,請參閱如何對導致 Lightsail 執行個體沒有回應的常見問題進行疑難排解?

作業系統層級的防火牆封鎖 SSH 連接埠的存取

以瀏覽器為基礎的 SSH 存取會使用 Amazon 的內部 IP 地址來連線到您的 Lightsail 執行個體。某些作業系統層級的防火牆和存取控制檔案只允許 SSH 存取一組 IP 地址,並拒絕所有其他 IP 地址。在這種情況下,您會收到 UPSTREAM_NOT_FOUND [519]UPSTREAM_ERROR [515] 錯誤。如果防火牆徹底封鎖 SSH 存取,也會發生相同問題。

**注意:**作業系統層級防火牆的範例包括 Iptables 和 UFW,而控制檔案的範例為 /etc/hosts.deny (在以 cPanel 為基礎的執行個體中託管存取控制)。

若要解決此問題,請執行下列其中一個動作:

  • 如果能夠使用終端機或 PuTTY 應用程式以 SSH 存取執行個體,則請登入執行個體並從防火牆和 /etc/hosts.deny 檔案中移除拒絕規則。
  • 如果您有 cPanel 執行個體,則請存取 WHM 主控台以移除防火牆規則。
  • 如果您無法從終端機或 PuTTY 應用程式使用 SSH 連線到執行個體,則請使用啟動指令碼來停用防火牆。您只能在啟動執行個體時新增啟動指令碼。若要使用啟動指令碼來停用作業系統層級的防火牆、Iptables 和 UFW,請執行下列步驟:

1.    開啟 Amazon Lightsail 主控台

2.    建立執行個體的手動快照

3.    在 Snapshots (快照) 索引標籤的 Manual snapshots (手動快照) 下,選取新快照旁邊的三個點圖示。

4.    選取 建立新執行個體 (Create new instance)

5.    選取與上一個執行個體相同的可用區域。

6.    選取 Add launch script (新增啟動指令碼),然後新增下列指令碼。

**注意:**下列範例會停用 UFW 防火牆、排清所有 iptable 鏈結或防火牆規則,並透過重新命名來停用 /etc/hosts.deny 檔案。

sudo ufw disable
sudo iptables -F
sudo mv /etc/hosts.deny /etc/hosts.deny_backup
sudo touch /etc/hosts.deny
sudo systemctl enable sshd
sudo systemctl restart sshd

7.    選擇新的執行個體方案,或使用與上一個執行個體相同的方案。

8.    輸入執行個體的名稱,然後選取 Create instance (建立執行個體)

新執行個體開始執行之後,請等候 10 到 15 分鐘,然後嘗試使用以瀏覽器為基礎的 SSH 主控台來與其連線。

**注意:**如果上一個執行個體有靜態 IP 地址,則您也可以用在新的執行個體上。分開靜態 IP 地址,然後再從 Networking (聯網) 索引標籤將其連接到新的執行個體。如需詳細資訊,請參閱 Amazon Lightsail 中的靜態 IP 地址

SSH 服務已關閉

如果 SSH 服務在執行個體上並未執行或作用,則 SSH 連線會失敗,並且您會收到 UPSTREAM_NOT_FOUND [519] 錯誤。若要針對此問題進行疑難排解,請為您的 Lightsail 執行個體設定 AWS Systems Manager 工作階段管理員服務。在設定工作階段管理員後,請在不使用 SSH 服務的情況下存取執行個體,然後修復 SSH 問題。

SSH 問題的基本疑難排解步驟包括:

  • 視作業系統發行版本而定,檢閱 /var/log/auth.log/var/log/secure 檔案中的 SSH 身分驗證日誌以識別錯誤。
  • 測試 SSH 組態檔案語法,然後更正所有錯誤。
sudo sshd -t
sudo systemctl restart sshd

Lightsail 系統金鑰 /etc/ssh/lightsail_instance_ca.pub 組態錯誤

Lightsail 會使用系統金鑰 /etc/ssh/lightsail_instance_ca.pub 來啟用以瀏覽器為基礎的 SSH 存取。如果此檔案遺失,則 SSH 身分驗證會失敗,並且您會收到 CLIENT_UNAUTHORIZED [769] 錯誤。如果未在 SSH 組態檔案 /etc/ssh/sshd_config 中的 TrustedUserCAKeys 參數內指定 Lightsail 系統金鑰,也會發生相同的錯誤。

如果能夠透過終端機或 PuTTY 應用程式以 SSH 連線到執行個體,請登入該執行個體,然後確認 /etc/ssh/sshd_config 檔案存在,且其中包含 ssh-rsa 金鑰。

如果檔案遺失,請使用下列步驟重新建立檔案:

1.    執行下列命令,並確認您在命令輸出中可取得 ssh-rsa 金鑰:

sudo cat /var/lib/cloud/instance/user-data.txt | grep ^ssh-rsa

2.    如果該命令的輸出中傳回 ssh-rsa 金鑰,則執行下列命令將該金鑰複製到 /etc/ssh/lightsail_instance_ca.pub

sudo sh -c "cat /var/lib/cloud/instance/user-data.txt | grep ^ssh-rsa > /etc/ssh/lightsail_instance_ca.pub"
    sudo sh -c "echo >> /etc/ssh/sshd_config" 
    sudo sh -c "echo 'TrustedUserCAKeys /etc/ssh/lightsail_instance_ca.pub' >> /etc/ssh/sshd_config"
    sudo systemctl restart sshd

3.    如果您沒有從步驟 1 取得 ssh-rsa 密鑰,或如果您無法使用終端機或 PuTTY 應用程式以 SSH 存取執行個體,則請建立執行個體的手動快照使用該快照啟動新的執行個體。系統便會在執行個體啟動時自動將 Lightsail 系統金鑰新增至伺服器。

您已經從較舊的 Ubuntu 版本升級到 20.04 或更新版本

對於執行 Ubuntu 20.04 或更新版本的執行個體,您必須允許憑證授權單位 (CA) 使用 ssh-rsa 演算法來簽署憑證。否則,身分驗證會失敗,並且您會收到 CLIENT_UNAUTHORIZED [769] 錯誤。在 Ubuntu 20.04 執行個體中,系統預設會允許 CA 使用 ssh-rsa 演算法。但是,如果您將較舊的 Ubuntu 版本升級到 20.04,則必須手動允許 CA。若要這麼做,請依照下列步驟執行:

1.    使用 SSH 用戶端 (例如終端或 PuTTY 應用程式) 連線到執行個體。

2.    開啟 SSH 組態檔案 (/etc/ssh/sshd_config)。

3.    根據您的 Ubuntu 版本,將 CA 參數新增到檔案中:

       **如果作業系統版本升級到 Ubuntu 20.04:**手動將 CASignatureAlgorithms 參數行輸入到 sshd_config 檔案:

$ sudo vi /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | egrep "CASignature"
CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

       **如果作業系統版本升級到 Ubuntu 22.04:**手動將 CASignatureAlgorithmsPubkeyAcceptedAlgorithms 參數行輸入到 sshd_config 檔案:

$ sudo vi /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | egrep "CASignature|PubkeyAccepted"
CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa-cert-v01@openssh.com,ssh-rsa

4.    執行下列命令以驗證 sshd 組態檔內容:

$ sudo sshd -T

5.   執行下列命令以重新啟動 sshd 服務:

$ sudo systemctl restart sshd

AWS 官方
AWS 官方已更新 1 年前