連線到 Linux 執行個體的疑難排解 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

連線到 Linux 執行個體的疑難排解

下列資訊和常見錯誤可協助您疑難排解連線到執行個體的問題。

連線問題的常見原因

建議您透過確認已正確執行下列任務來開始疑難排解執行個體的連線問題。

確認執行個體的使用者名稱

使用您的使用者帳戶的使用者名稱或用於啟動執行個體的 AMI 預設使用者名稱,可連線至執行個體。

  • 取得使用者帳戶的使用者名稱。

    如需如何建立使用者帳戶的詳細資訊,請參閱管理 Linux 執行個體上的系統使用者

  • 取得您用於啟動執行個體的 AMI 的預設使用者名稱:

    用於啟動執行個體的 AMI 預設使用者名稱

    AL2023

    Amazon Linux 2

    Amazon Linux

    ec2-user
    CentOS centosec2-user
    Debian admin
    Fedora fedoraec2-user
    RHEL ec2-userroot
    SUSE ec2-userroot
    Ubuntu ubuntu
    Oracle ec2-user
    Bitnami bitnami
    Rocky Linux rocky
    其他 檢查 AMI 提供者
確認您的安全性群組規則允許流量

請確保與執行個體關聯的安全群組允許來自您的 IP 地址的傳入 SSH 流量。VPC 的預設安全群組根據預設並不允許傳入 SSH 流量。啟動執行個體精靈建立的安全群組根據預設會啟用 SSH 流量。如需將傳入 SSH 流量規則新增至 Linux 執行個體的步驟,請參閱 從您電腦連線到執行個體的規則。如需驗證步驟,請參閱 連線到執行個體時發生錯誤:連線時間逾時

確認您的執行個體已就緒

啟動執行個體之後,執行個體可能需要幾分鐘的時間準備就緒讓您連接。檢查您的執行個體,以確保它正在執行並通過其狀態檢查。

  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選取 Instances (執行個體),然後選取您的執行個體。

  3. 請確認下列內容:

    1. Instance state (執行個體狀態) 欄中,驗證您的執行個體處於 running 狀態。

    2. Status check (狀態檢查) 欄中,驗證您的執行個體已通過兩項狀態檢查。

確認已滿足連線的所有先決條件

確保您備妥連線所需的所有資訊。如需詳細資訊,請參閱 連接至您的 Linux 執行個體

如需連線類型的特定先決條件,例如 SSH、EC2 Instance Connect、OpenSSH、PuTTY 等,請參閱下列選項。

Linux 或 macOS X

如果您的本機電腦作業系統是 Linux 或 macOS X,則請檢查以下連線選項的特定先決條件:

Windows

如果您的本機電腦作業系統是 Windows,則請檢查以下連線選項的特定先決條件:

連線到執行個體時發生錯誤:連線時間逾時

如果您試著連線至執行個體,並收到錯誤訊息 Network error: Connection timed outError connecting to [instance], reason: -> Connection timed out: connect,則請嘗試下列動作:

檢查安全群組規則。

您需要安全群組規則,來允許透過適當的連接埠,從本機電腦公有 IPv4 地址傳入流量。

  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選取 Instances (執行個體),然後選取您的執行個體。

  3. 在主控台頁面底部的 Security (安全) 標籤上,檢查 Inbound rules (傳入規則) 下方所選執行個體已生效的規則清單。

    • 如果是 Linux 執行個體,請確認規則存在,此規則會允許從本機電腦傳送流量到連接埠 22 (SSH)。

    • 如果是 Windows 執行個體,請確認規則存在,此規則會允許從本機電腦傳送流量到連接埠 3389 (RDP)。

    如果安全群組不具有規則來允許從本機電腦傳入流量,請在安全群組中新增規則。如需詳細資訊,請參閱 從您電腦連線到執行個體的規則

  4. 針對允許傳入流量的規則,請檢查 Source (來源) 欄位。如果該值是單一 IP 地址,而且 IP 地址不是靜態的,則每次重新啟動電腦時都會指派新的 IP 地址。這將導致規則不會包括您電腦的 IP 地址流量。如果您的電腦位於企業網路中,或者如果您是透過網際網路服務供應商 (ISP) 連線,或者如果您的電腦 IP 地址是動態地址並且在每次重新啟動電腦時都會變更,則 IP 地址可能不是靜態地址。若要確保您的安全群組規則允許從本機電腦傳入流量,請指定用戶端電腦使用的 IP 地址範圍,而不是為 Source (來源) 指定單一 IP 地址。

    如需安全群組規則的詳細資訊,請參閱 Amazon VPC 使用者指南 中的 安全群組規則

查看子網的路由表。

您需要一個路由路徑,來將目的地位於 VPC 之外的所有流量,傳送到 VPC 的網際網路閘道。

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選取 Instances (執行個體),然後選取您的執行個體。

  3. Networking (網路) 標籤上,請記下 VPC IDSubnet ID (子網 ID) 的值。

  4. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  5. 在導覽窗格中,選擇 Internet Gateways (網際網路閘道)。請確認已經有網際網路閘道連結到 VPC。否則請選擇 Create internet gateway (建立網際網路閘道)、輸入網際網路閘道的名稱,然後選擇 Create internet gateway (建立網際網路閘道)。然後,針對您建立的網際網路閘道,選取 Actions (動作)Attach to VPC (連接至 VPC)、選取您的 VPC,然後選取 Attach internet gateway (連接網際網路閘道),以將網際網路閘道連接至您的 VPC。

  6. 在導覽窗格中,選取 Subnets (子網),然後選取子網。

  7. Route Table (路由表) 索引標籤中,確認有包含 0.0.0.0/0 的路由做為目的地,以及有 VPC 的網際網路閘道做為目標。如果您是使用其 IPv6 地址來連線到執行個體,請確認有針對所有 IPv6 流量 (::/0) 的路由,來指向網際網路閘道。若否,請執行下列操作:

    1. 選擇路由表 ID (rtb-xxxxxxxx) 以導覽至路由表。

    2. Routes (路由) 標籤中,選擇 Edit routes (編輯路由)。選擇 Add route (新增路由),使用 0.0.0.0/0 做為目的地,並以網際網路閘道為目標。若是 IPv6,請選擇 Add route (新增路由),使用 ::/0 做為目的地,並以網際網路閘道為目標。

    3. 選擇 Save routes (儲存路由)

查看子網的網路存取控制清單 (ACL)。

網路 ACL 必須允許連接埠 22 (適用於 Linux 執行個體) 或連接埠 3389 (適用於 Windows 執行個體) 上的本機 IP 地址的傳入流量。它也必須允許傳送到暫時連接埠 (1024-65535) 的傳出流量。

  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中,選擇 Subnets (子網)。

  3. 選取您的子網。

  4. Network ACL (網路 ACL) 索引標籤中,對於 Inbound rules (傳入規則),請確認這些規則允許透過所需的連接埠,從您的電腦傳入流量。否則,請刪除或修改會阻止流量的規則。

  5. 對於 Outbound Rules (傳出規則),確認這些規則允許透過暫時連接埠將流量傳出到電腦。否則,請刪除或修改會阻止流量的規則。

如果您的電腦位於企業網路中

請詢問網路管理員,了解內部的防火牆是否允許透過 22 號 (適用於 Linux 執行個體) 或 3389 號埠 (適用於 Windows 執行個體),來傳入流量到您的電腦或從您的電腦傳出。

如果您的電腦上具有防火牆,請確認此防火牆是否允許透過 22 號 (適用於 Linux 執行個體) 或 3389 號埠 (適用於 Windows 執行個體),來傳入流量到您的電腦或從您的電腦傳出。

確認執行個體是否具備公有 IPv4 地址。

如果沒有,您可建立彈性 IP 地址與您執行個體的關聯。如需詳細資訊,請參閱 彈性 IP 地址

檢查執行個體上的 CPU 負載,伺服器可能會過載。

AWS 自動提供 Amazon CloudWatch 指標和執行個體狀態等資料,您可以使用這些資料來查看執行個體上有多少 CPU 負載,並在必要時調整負載的處理方式。如需詳細資訊,請參閱 使用監控執行個體 CloudWatch

若要使用 IPv6 地址來連線到執行個體,請檢察下列項目:

  • 與子網具有關聯的路由表,必須包含讓 IPv6 流量 (::/0) 傳到網際網路閘道的路由路徑。

  • 安全群組規則必須允許從本機的 IPv6 地址,透過適當的通訊埠傳入流量 (Linux 為 22 號埠;Windows 為 3389 號埠)。

  • 網路 ACL 必須允許外傳和傳入的 IPv6 流量。

  • 如果從舊版的 AMI 啟動執行個體,則執行個體可能未針對 DHCPv6 設定 (在網路介面上不會自動辨識 IPv6 地址)。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的在執行個體上設定 IPv6

  • 您的本機電腦必須擁有 IPv6 地址,且必須設定以使用 IPv6。

錯誤:無法載入金鑰 ... 預期為:任一私有金鑰

如果您嘗試連接到您的執行個體並收到錯誤訊息 unable to load key ... Expecting: ANY PRIVATE KEY,則表示存放私有金鑰的檔案設定不正確。如果私有金鑰檔案以 .pem 結尾,則表示可能仍設定不正確。私有金鑰檔案設定錯誤的可能原因是憑證遺失。

如果私有金鑰檔案設定不正確,請依照以下步驟解決錯誤
  1. 建立新的金鑰對。如需詳細資訊,請參閱 使用 Amazon EC2 建立金鑰對

    注意

    或者,您也可以使用第三方工具來建立新的金鑰對。如需詳細資訊,請參閱 使用第三方工具來建立金鑰對,然後將公有金鑰匯入 Amazon EC2

  2. 將新的金鑰對新增到執行個體。如需詳細資訊,請參閱 我的私有金鑰遺失。如何連線到我的 Linux 執行個體?

  3. 使用新的金鑰對連線至執行個體。

錯誤:伺服器無法辨識使用者金鑰

若如果使用 SSH 連線到執行個體
  • 使用 ssh -vvv,在連線時取得三重 verbose (詳細模式) 的除錯資訊:

    ssh -vvv -i path/key-pair-name.pem instance-user-name@ec2-203-0-113-25.compute-1.amazonaws.com

    下列的輸出範例,示範了在嘗試使用伺服器無法辨識的金鑰來連線到執行個體時,可能會顯示的訊息:

    open/ANT/myusername/.ssh/known_hosts). debug2: bits set: 504/1024 debug1: ssh_rsa_verify: signature correct debug2: kex_derive_keys debug2: set_newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug2: set_newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug2: key: boguspem.pem ((nil)) debug1: Authentications that can continue: publickey debug3: start over, passed a different list publickey debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Trying private key: boguspem.pem debug1: read PEM private key done: type RSA debug3: sign_and_send_pubkey: RSA 9c:4c:bc:0c:d0:5c:c7:92:6c:8e:9b:16:e4:43:d8:b2 debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey debug2: we did not send a packet, disable method debug1: No more authentication methods to try. Permission denied (publickey).
如果使用 PuTTY 連線到您的執行個體
  • 確認私有金鑰 (.pem) 檔案是否已轉換為 PuTTY (.ppk) 可以辨識的格式。如需有關轉換私有金鑰的詳細資訊,請參閱使用 PuTTY 從 Windows 連線至 Linux 執行個體

    注意

    在 PuTTYgen 中,載入私有金鑰,然後選取 Save Private Key (儲存私有金鑰),而非 Generate (產生)

  • 確認您在連線時使用了適當的 AMI 使用者名稱。在 PuTTY Configuration (PuTTY 組態) 視窗的 Host name (主機名稱) 中,輸入使用者的名稱。

    用於啟動執行個體的 AMI 預設使用者名稱

    AL2023

    Amazon Linux 2

    Amazon Linux

    ec2-user
    CentOS centosec2-user
    Debian admin
    Fedora fedoraec2-user
    RHEL ec2-userroot
    SUSE ec2-userroot
    Ubuntu ubuntu
    Oracle ec2-user
    Bitnami bitnami
    Rocky Linux rocky
    其他 檢查 AMI 提供者
  • 確認已建立傳入安全群組的規則,以允許從適當的連接埠傳入流量。如需詳細資訊,請參閱 從您電腦連線到執行個體的規則

錯誤:許可遭拒或 [執行個體] 連接埠 22 已關閉連線

若使用 SSH 連線至執行個體,並出現下列任一錯誤:Host key not found in [directory]Permission denied (publickey)Authentication failed, permission deniedConnection closed by [instance] port 22,請確認您在連線時使用了適當的 AMI 使用者名稱,且已為執行個體指定正確的私有金鑰 (.pem) 檔案。

適合的使用者名稱如下:

用於啟動執行個體的 AMI 預設使用者名稱

AL2023

Amazon Linux 2

Amazon Linux

ec2-user
CentOS centosec2-user
Debian admin
Fedora fedoraec2-user
RHEL ec2-userroot
SUSE ec2-userroot
Ubuntu ubuntu
Oracle ec2-user
Bitnami bitnami
Rocky Linux rocky
其他 檢查 AMI 提供者

例如,若要使用 SSH 用戶端來連接至 Amazon Linux 執行個體,請使用下列命令:

ssh -i /path/key-pair-name.pem instance-user-name@ec2-203-0-113-25.compute-1.amazonaws.com

請確認在啟動執行個體時,所使用的私有金鑰檔案可對應到您所選取的金鑰對。

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選取 Instances (執行個體),然後選取您的執行個體。

  3. Details (詳細資訊) 標籤上,驗證 Instance details (執行個體詳細資訊) 下方中 Key pair name (金鑰對名稱) 的值。

  4. 如果在啟動執行個體時,您並未指定金鑰對,可以終止該執行個體並啟動新的執行個體,來確保指定金鑰對。如果這是一直在使用的執行個體,但是您已經沒有金鑰對的 .pem 檔案,可以用新的金鑰對來取代舊的。如需詳細資訊,請參閱 我的私有金鑰遺失。如何連線到我的 Linux 執行個體?

如果產生自己的金鑰對,請確定金鑰產生器已經過設定,可產生 RSA 金鑰。DSA 金鑰是不被接受的。

如果收到 Permission denied (publickey) 錯誤,而上述的所有情況皆不適用 (例如,先前可以連線),可能是對執行個體家目錄的權限已變更。對 /home/instance-user-name/.ssh/authorized_keys 的權限必須限定為只指派給擁有者。

在執行個體上確認權限
  1. 停止執行個體並分離根磁碟區。如需詳細資訊,請參閱 停止並啟動 Amazon EC2 執行個體

  2. 在目前執行個體所在的同一個可用區域中,啟動暫時執行個體 (使用與目前執行個體所用 AMI 類似的或相同的 AMI),然後將根磁碟區連結到暫時執行個體。

  3. 連線到暫時執行個體、建立掛載點,然後掛載已連結的磁碟區。

  4. 從暫時執行個體,檢查已連結磁碟區 /home/instance-user-name/ 目錄的權限。必要時,請依照下列方式來調整權限:

    [ec2-user ~]$ chmod 600 mount_point/home/instance-user-name/.ssh/authorized_keys
    [ec2-user ~]$ chmod 700 mount_point/home/instance-user-name/.ssh
    [ec2-user ~]$ chmod 700 mount_point/home/instance-user-name
  5. 取消掛載磁碟區、將該磁碟區從暫時執行個體分離,然後再重新連結到原始執行個體。請務必為根磁碟區指定正確的裝置名稱,例如 /dev/xvda

  6. 啟動執行個體。如果不再需要暫時執行個體,您可以將其終止。

錯誤:未受保護的私有金鑰檔案

私有金鑰檔案必須受到保護,不讓其他任何使用者讀取或寫入。如果私有金鑰可以讓除了您以外的任何人讀取或寫入,SSH 會忽略您的金鑰,而且會出現下列的警告訊息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0777 for '.ssh/my_private_key.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: .ssh/my_private_key.pem Permission denied (publickey).

如果在您試著登入執行個體時,出現類似的訊息,請檢驗該錯誤訊息的第一行,來確認是否針對執行個體使用了正確的公有金鑰。上列的範例使用私有金鑰 .ssh/my_private_key.pem,此金鑰具有 0777 的檔案權限,可讓所有人讀取或寫入此檔案。這種權限等級非常地不安全,因此 SSH 會忽略此金鑰。

如果從 macOS 或 Linux 連線,請執行下列命令來修正此錯誤,替換私有金鑰檔案的路徑。

[ec2-user ~]$ chmod 0400 .ssh/my_private_key.pem

如果從 Windows 連線,請在您的本機電腦上執行下列步驟。

  1. 導覽至 .pem 檔案。

  2. 在 .pem 檔案上按一下右鍵,然後選取 Properties (屬性)。

  3. 選擇 Security (安全) 標籤。

  4. 選取 Advanced (進階)。

  5. 請確認您是檔案的擁有者。如果不是,請將擁有者變更為您的使用者名稱。

  6. 選取 Disable inheritance (停用繼承) 和 Remove all inherited permissions from this object (移除此物件的所有繼承許可)。

  7. 選取 Add (新增)、Select a principal (選取委託人),輸入您的使用者名稱,然後選取 OK (確定)。

  8. Permission Entry (許可項目) 視窗中,授予 Read (讀取) 許可,然後選取 OK (確定)。

  9. 按一下 Apply (套用),以確保儲存所有設定。

  10. 選取 OK (確定) 關閉 Advanced Security Settings (進階安全設定) 視窗。

  11. 選取 OK (確定) 關閉 Properties (屬性) 視窗。

  12. 您應該能夠透過 SSH 從 Windows 連線至 Linux 執行個體。

在 Windows 命令提示中執行下列命令。

  1. 在命令提示中,導覽至 .pem 檔案的檔案路徑位置。

  2. 執行下列命令,重設並移除明確許可:

    icacls.exe $path /reset
  3. 執行下列命令,對目前使用者授予讀取許可:

    icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
  4. 執行下列命令以停用繼承並移除繼承的許可。

    icacls.exe $path /inheritance:r
  5. 您應該能夠透過 SSH 從 Windows 連線至 Linux 執行個體。

錯誤:私有金鑰的開頭必須為「-----BEGIN RSA PRIVATE KEY-----」,結尾為「-----END RSA PRIVATE KEY-----」

如果您使用第三方工具 (例如 ssh-keygen) 來建立 RSA 金鑰對,則它會以 OpenSSH 金鑰格式產生私有金鑰。當您連線到您的執行個體時,如果以 OpenSSH 格式使用私有金鑰來解密密碼,則您會得到錯誤 Private key must begin with "-----BEGIN RSA PRIVATE KEY-----" and end with "-----END RSA PRIVATE KEY-----"

若要解決錯誤,私有金鑰必須採用 PEM 格式。使用下列命令,以 PEM 格式建立私有金鑰:

ssh-keygen -m PEM

錯誤:伺服器拒絕了我們的金鑰,或是沒有可用的支援驗證方法

如果使用 PuTTY 來連線到執行個體,並出現下列任一錯誤:Error: Server refused our key (錯誤:伺服器拒絕了我們的金鑰)Error: No supported authentication methods available (錯誤:沒有可用的支援驗證方法),請確認您在連線時使用了適當的 AMI 使用者名稱。在 PuTTY Configuration (PuTTY 組態) 視窗的 User name (使用者名稱) 中輸入使用者名稱。

適合的使用者名稱如下:

用於啟動執行個體的 AMI 預設使用者名稱

AL2023

Amazon Linux 2

Amazon Linux

ec2-user
CentOS centosec2-user
Debian admin
Fedora fedoraec2-user
RHEL ec2-userroot
SUSE ec2-userroot
Ubuntu ubuntu
Oracle ec2-user
Bitnami bitnami
Rocky Linux rocky
其他 檢查 AMI 提供者

您也應該確認:

無法對執行個體執行 Ping 動作

ping 命令是一種 ICMP 傳輸流量 — 如果無法對執行個體執行 ping 命令,請確定傳入安全群組的規則,可允許 ICMP 傳輸流量接收從所有來源,或是從您用來發出指令的電腦或執行個體,所傳送的 Echo Request 訊息。

如果無法從執行個體發出 ping 指令,請確定安全群組外傳的規則,可允許 ICMP 傳輸流量,來讓 Echo Request 訊息傳到所有目的地,或是傳到您想要對其執行 ping 的主機。

Ping 命令也可能會遭到防火牆封鎖,或因為網路延遲或硬體問題而逾時。如需進一步疑難排解的協助,請洽詢您的區域網路或系統管理員。

錯誤:伺服器意外關閉網路連線

如果您使用 PuTTY 連接到執行個體,並且收到錯誤「伺服器意外關閉網路連線」,請驗證您在 PuTTY 組態的連線頁面上是否已啟用保持連線,以避免中斷連線。部分伺服器在指定的期間內未收到任何資料時會中斷連接用戶端。將 Seconds between keepalives (保持連線之間的秒數) 設為 59 秒。

如果您在啟用保持連線之後仍遇到問題,請在 PuTTY 組態的連線頁面上嘗試停用 Nagle 的演算法。

錯誤:EC2 Instance Connect 的主機金鑰驗證失敗

如果您輪替執行個體主機金鑰,新的主機金鑰不會自動上傳到 AWS 受信任的主機金鑰資料庫。因此當您嘗試使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線到您的執行個體時,這會導致主機金鑰驗證失敗,而無法連線到您的執行個體。

若要解決此錯誤,您必須在 eic_harvest_hostkeys 執行個體上執行指令碼,以將新的主機金鑰上傳至 EC2 Instance Connect。指令碼位於 Amazon Linux 2 執行個體上的 /opt/aws/bin/ 和 Ubuntu 執行個體上的 /usr/share/ec2-instance-connect/

Amazon Linux 2
解決 Amazon Linux 2 執行個體上的主機金鑰驗證失敗錯誤
  1. 使用 SSH 連線到您的執行個體。

    您可以使用 EC2 Instance Connect CLI 或在您啟動執行個體時指派至該執行個體的 SSH 金鑰對,並使用您在啟動執行個體所用的 AMI 預設使用者名稱,來進行連線。Amazon Linux 2 的預設使用者名稱為 ec2-user

    例如,如果執行個體的啟動方式是 Amazon Linux 2,執行個體的公有 DNS 名稱是 ec2-a-b-c-d.us-west-2.compute.amazonaws.com,金鑰對是 my_ec2_private_key.pem,則使用以下命令來透過 SSH 連接至執行個體:

    $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    如需連線至執行個體的詳細資訊,請參閱使用 SSH 從 Linux 或 macOS 連線至 Linux 執行個體

  2. 導覽至以下資料夾。

    [ec2-user ~]$ cd /opt/aws/bin/
  3. 在執行個體上執行以下命令。


    [ec2-user ~]$ ./eic_harvest_hostkeys

    請注意,呼叫成功時不會產生輸出。

    您現在可以使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線至執行個體。

Ubuntu
解決 Ubuntu 執行個體上的主機金鑰驗證失敗錯誤
  1. 使用 SSH 連線到您的執行個體。

    您可以使用 EC2 Instance Connect CLI 或在您啟動執行個體時指派至該執行個體的 SSH 金鑰對,並使用您在啟動執行個體所用的 AMI 預設使用者名稱,來進行連線。若是 Ubuntu,預設使用者名稱為 ubuntu

    例如,如果執行個體的啟動方式是 Ubuntu,執行個體的公有 DNS 名稱是 ec2-a-b-c-d.us-west-2.compute.amazonaws.com,金鑰對是 my_ec2_private_key.pem,則使用以下命令來透過 SSH 連接至執行個體:

    $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    如需連線至執行個體的詳細資訊,請參閱使用 SSH 從 Linux 或 macOS 連線至 Linux 執行個體

  2. 導覽至以下資料夾。

    [ec2-user ~]$ cd /usr/share/ec2-instance-connect/
  3. 在執行個體上執行以下命令。


    [ec2-user ~]$ ./eic_harvest_hostkeys

    請注意,呼叫成功時不會產生輸出。

    您現在可以使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線至執行個體。

無法使用 EC2 Instance Connect 連線至 Ubuntu 執行個體

如果您使用 EC2 Instance Connect 連線至 Ubuntu 執行個體,並且在嘗試連線時出現錯誤,可以使用以下資訊嘗試修復問題。

可能的原因

該執行個體的 ec2-instance-connect 套件並非最新版本。

解決方案

如下所示將該執行個體的 ec2-instance-connect 套件更新至最新版本:

  1. 使用 EC2 Instance Connect 以外的方法連線至您的執行個體。

  2. 在您的執行個體上執行以下命令,將 ec2-instance-connect 套件更新至最新版本。

    apt update && apt upgrade

我的私有金鑰遺失。如何連線到我的 Linux 執行個體?

如果遺失了 EBS 後端執行個體的私有金鑰,您可以重新獲得對執行個體的存取權限。您必須停止執行個體、中斷其根磁碟區的連結,並將該磁碟區做為資料磁碟區連接至其他執行個體、使用新的公有金鑰修改 authorized_keys 檔案、將磁碟區移回到原始的執行個體,然後重新啟動執行個體。關於啟動、連線到和停用執行個體,詳細資訊請參閱 執行個體生命週期

僅具有 EBS 根磁碟區的執行個體支援此程序。如果根裝置是執行個體存放區磁碟區,則無法使用此程序來重新獲取執行個體的存取權;您必須具備私有金鑰,才能連線到執行個體。若要確定執行個體的根裝置類型,請開啟 Amazon EC2 主控台,選擇執行個體,選取執行個體,選擇儲存索引標籤,然後在根裝置詳細資訊區段中,檢查根裝置類型的值。

此值為 EBSINSTANCE-STORE

除了下列步驟之外,遺失私有金鑰時還有其他方法可以連線到 Linux 執行個體。如需詳細資訊,請參閱如果我在初次啟動後遺失了 SSH 金鑰對,該如何連接到 Amazon EC2 執行個體?

步驟 1:建立新的金鑰對

使用 Amazon EC2 主控台或第三方工具來產生新的金鑰對。如果希望新金鑰對的名稱,和已遺失私有金鑰的相同,您必須先刪除現有的金鑰對。如需建立新金鑰對的詳細資訊,請參閱使用 Amazon EC2 建立金鑰對使用第三方工具來建立金鑰對,然後將公有金鑰匯入 Amazon EC2

步驟 2:取得關於原始執行個體及其根磁碟區的資訊

請儲存下列資訊,完成此程序將會需要用到這些資訊。

取得原始執行個體的相關資訊
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中選取 Instances (執行個體),然後選取您要連線的執行個體。(我們會將此執行個體稱為「原始」執行個體。)

  3. Details (詳細資訊) 索引標籤上記下執行個體 ID 和 AMI ID。

  4. 網路 索引標籤上記下 「可用區域」。

  5. Storage (儲存) 索引標籤下的 根裝置名稱,記下根磁碟區的裝置名稱 (例如:/dev/xvda)。接著,在 區塊型儲存裝置 下找出這個裝置名稱,並記下磁碟區 ID (例如:vol-0a1234b5678c910de)。

步驟 3:停止原始執行個體

選擇 Instance state (執行個體狀態)Stop instance (停止執行個體)。如果此選項已停用,則執行個體已停止或其根設備是執行個體存放磁碟區。

警告

停止執行個體時,在任何執行個體存放區磁碟區的資料都會清除。若要保留執行個體存放區磁碟區的資料,請將資料備份至持久性儲存。

步驟 4:啟動暫時執行個體

New console
啟動暫時執行個體
  1. 在導覽窗格中,選擇 Instances (執行個體),然後選擇 Launch instances (啟動執行個體)。

  2. Name and tags (名稱和標籤) 區段,針對 Name (名稱),輸入 Temporary (暫時)。

  3. Application and OS Images (應用程式和作業系統映像) 區段,選取您用來啟動原始執行個體的同一個 AMI。如果此 AMI 無法使用,您可以從已停止的執行個體,建立能夠使用的 AMI。如需詳細資訊,請參閱 創建一個 Amazon EBS-backed AMI

  4. Instance type (執行個體類型) 區段,保留預設執行個體類型。

  5. Key pair (金鑰對) 區段,針對 Key pair name (金鑰對名稱),選取要使用的現有金鑰對或建立新的金鑰對。

  6. Network settings (網路設定) 區段,選取 Edit (編輯),然後針對 Subnet (子網),選取與原始執行個體相同可用區域中的子網。

  7. Summary (摘要) 面板中,選擇 Launch (啟動)。

Old console

選擇 Launch Instance (啟動執行個體),接著再使用 Launch Wizard,透過下列選項來啟動 temporary (暫時) 執行個體:

  • Choose an AMI (選取 AMI) 頁面上,選取您之前用來啟動原始執行個體的同一個 AMI。如果此 AMI 無法使用,您可以從已停止的執行個體,建立能夠使用的 AMI。如需詳細資訊,請參閱 創建一個 Amazon EBS-backed AMI

  • Choose an Instance Type (選取執行個體類型) 頁面上,保留精靈為您選取的預設執行個體類型。

  • Configure Instance Details (設定執行個體詳細資訊) 頁面中,指定相同的可用區域做為原始執行個體。如果在 VPC 中啟動執行個體,請選取這個可用區域中的子網。

  • Add Tags (新增標籤) 頁面上,將 Name=Temporary 標籤加入執行個體,來表示這是暫時執行個體。

  • Review (檢閱) 頁面上,選擇 Launch (啟動)。選擇您在步驟 1 建立的金鑰對,然後選擇 Launch Instances (啟動執行個體)。

步驟 5:將根磁碟區與原始執行個體分離,並將其連接到暫時執行個體

  1. 在導覽窗格中選取 Volumes (磁碟區),接著再選取原始執行個體的根裝置磁碟區 (您已在先前的步驟中記下其磁碟區 ID)。選取 Actions (動作)、Detach Volume (分離磁碟區),然後選取 Detach (分離)。等待磁碟區的狀態變成 available。(您可能需要選取 Refresh (重新整理) 圖示。)

  2. 在已選取磁碟區的狀態下,選取 Actions (動作),然後再選取 Attach volume (連接磁碟區)。選取暫時執行個體的執行個體 ID、記下 Device name (裝置名稱) 中的指定裝置名稱 (例如:/dev/sdf),接著再選取 Attach volume (連接磁碟區)。

    注意

    如果您從 AWS Marketplace AMI 啟動原始執行個體,且磁碟區包含 AWS Marketplace 代碼,則必須先停止暫存執行個體,然後才能連接磁碟區。

步驟 6:在掛載到暫時執行個體的原始磁碟區上,將新的公有金鑰新增至的 authorized_keys

  1. 連線到暫時執行個體。

  2. 從暫時執行個體掛載已連結到執行個體的磁碟區,如此您就能存取其檔案系統。例如,如果裝置名稱為 /dev/sdf,請使用下列的指令來將磁碟區掛載為 /mnt/tempvol

    注意

    在執行個體上所顯示的裝置名稱可能會有不同。例如,掛載為 /dev/sdf 的裝置,在執行個體上可能會顯示為 /dev/xvdf。Red Hat 的某些版本 (或是其變體版本,例如 CentOS) 甚至可能會將結尾的字母增加 4 個字元,其中 /dev/sdf 會變成 /dev/xvdk

    1. 使用 lsblk 命令來查看磁碟區是否已分割。

      [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 101G 0 disk └─xvdf1 202:81 0 101G 0 part xvdg 202:96 0 30G 0 disk

      在上述的範例中,/dev/xvda/dev/xvdf 為分割的磁碟區,而 /dev/xvdg 則不是。如果磁碟區已分割,則在接下來的步驟中,您會掛載 (/dev/xvdf1) 而非原始裝置 (/dev/xvdf)。

    2. 建立暫時的目錄來掛載磁碟區。

      [ec2-user ~]$ sudo mkdir /mnt/tempvol
    3. 使用您先前找出的磁碟區名稱或裝置名稱,將磁碟區 (或分割磁碟區) 掛載至暫時掛載點。必要命令取決於作業系統的檔案系統。請注意,在執行個體上所顯示的設備名稱可能會有不同。如需詳細資訊,請參閱步驟 6 中的 note

      • Amazon Linux、Ubuntu 和 Debian

        [ec2-user ~]$ sudo mount /dev/xvdf1 /mnt/tempvol
      • Amazon Linux 2、CentOS、SUSE Linux 12 和 RHEL 7.x

        [ec2-user ~]$ sudo mount -o nouuid /dev/xvdf1 /mnt/tempvol
    注意

    如果您收到檔案系統毀損的錯誤,請執行下列命令,使用 fsck 公用程式來檢查檔案系統並修復任何問題:

    [ec2-user ~]$ sudo fsck /dev/xvdf1
  3. 從暫時執行個體使用下列的指令,用暫時執行個體的 authorized_keys 所產生的新公有金鑰,來更新已掛載磁碟區上的 authorized_keys

    重要

    下列的範例使用 Amazon Linux 使用者名稱 ec2-user。您可以需要換成不同的使用者名稱,例如適用於 Ubuntu 執行個體的 ubuntu

    [ec2-user ~]$ cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

    如果此項複製動作成功,您就可以進行下一個步驟。

    (選用) 否則,如果您沒有編輯 /mnt/tempvol 中的檔案的許可,必須使用 sudo 來更新檔案,然後檢查對於該檔案的許可,以確認您是否能夠登入原始執行個體。使用下列命令以檢查對檔案的許可。

    [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh total 4 -rw------- 1 222 500 398 Sep 13 22:54 authorized_keys

    在本範例輸出中,222 為使用者 ID,而 500 為群組 ID。接下來,請使用 sudo 來重新執行先前失敗的複製命令。

    [ec2-user ~]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

    再次執行下列命令,以確定許可是否已變更。

    [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh

    如果使用者 ID 和群組 ID 已變更,請使用下列命令來還原這些 ID。

    [ec2-user ~]$ sudo chown 222:500 /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

步驟 7:取消掛載原始磁碟區,並將該磁碟區從暫時執行個體分離,然後再重新連接到原始執行個體

  1. 從暫時執行個體取消掛載已連結的磁碟區,如此您就能將該磁碟區重新連結到原始執行個體。例如,使用以下命令來取消掛載位於 /mnt/tempvol 的磁碟區。

    [ec2-user ~]$ sudo umount /mnt/tempvol
  2. 將磁碟區從暫時執行個體分離 (您在上一步已卸載該磁碟區):從 Amazon EC2 主控台,選取導覽窗格中的 Volumes (磁碟區),選取原始執行個體的根裝置磁碟區 (您在上一步已記下磁碟區 ID),選取 Actions (動作)、Detach volume (分離磁碟區),接著再選取 Detach (分離)。等待磁碟區的狀態變成 available。(您可能需要選取 Refresh (重新整理) 圖示。)

  3. 將磁碟區重新連接到原始執行個體:在已選取磁碟區的狀態下,選取 Actions (動作)、Attach volume (連接磁碟區)。選取原始執行個體的執行個體 ID、指定您先前在步驟 2 中為原始根裝置連接 (/dev/sda1/dev/xvda) 記錄的裝置名稱,然後選取 Attach volume (連接磁碟區)。

    重要

    如果您並未指定與原始連結相同的裝置名稱,則無法啟動原始執行個體。Amazon EC2 預期根裝置磁碟區位於 sda1/dev/xvda

步驟 8:使用新的金鑰對連線到原始執行個體

選取原始執行個體,然後依序選取 Instance state (執行個體狀態)Start instance (啟動執行個體)。在執行個體進入 running 狀態之後,您可以使用新金鑰對的私有金鑰檔案,來連線到該執行個體。

注意

如果新金鑰對的名稱和對應的私有金鑰檔案,與原始金鑰對的名稱不同,請務必在連線到執行個體時,指定新私有金鑰檔案的名稱。

步驟 9:清理

(選用) 如果不需再使用時,您可以終止暫時執行個體。選取暫時執行個體,再依序選取 Instance state (執行個體狀態)Terminate instance (終止執行個體)