解決連線到 Amazon EC2 Linux 執行個體的問題 - Amazon Elastic Compute Cloud

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

解決連線到 Amazon EC2 Linux 執行個體的問題

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

連線問題的常見原因

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

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

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

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

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

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

    AMI用於啟動實例 預設使用者名稱

    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. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

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

  3. 請確認下列內容:

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

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

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

確保您擁有連接所需的所有信息。如需詳細資訊,請參閱使用 Connect 到您的 Linux 執行個體 SSH

從 X 或者 X Connect

如果您的本機電腦作業系統是 Linux 或 macOS X,請檢查下列各項以取得連線至 Linux 執行個體的特定先決條件:

從 Windows 進行連線

如果您的本機電腦作業系統是 Windows,請檢查下列項目以取得連線至 Linux 執行個體的特定先決條件:

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

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

檢查安全群組規則。

您需要一個安全性群組規則,允許從適當連接埠上的本機電腦公用IPv4位址傳入流量。

  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

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

  3. 在主控台頁面底部的 Security (安全) 標籤上,檢查 Inbound rules (傳入規則) 下方所選執行個體已生效的規則清單。確認有規則可允許從本機電腦傳輸到通訊埠 22 (SSH) 的流量。

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

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

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

查看子網的路由表。

您需要一個路由,將所有流量發送VPC到網際網路閘道之VPC外。

  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

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

  3. 在 [網路] 索引標籤上,記下 VPCID子網路 ID 的值。

  4. 在打開 Amazon VPC 控制台https://console.aws.amazon.com/vpc/

  5. 在導覽窗格中,選擇 Internet Gateways (網際網路閘道)。請確認您的VPC. 否則請選擇 Create internet gateway (建立網際網路閘道)、輸入網際網路閘道的名稱,然後選擇 Create internet gateway (建立網際網路閘道)。然後,針對您建立的網際網路閘道,選擇 [動作]、[附加至] VPC、選取您的VPC,然後選擇 [連接網際網路閘道] 將其附加至您的VPC。

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

  7. 在「路由」(Route) 表格索引標籤上,確認有路由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,選擇 [新增路由],::/0做為目的地,使用網際網路閘道做為目標。

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

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

網路ACLs必須允許來自連接埠 22 上本機 IP 位址的輸入SSH流量。它也必須允許傳送到暫時連接埠 (1024-65535) 的傳出流量。

  1. 在打開 Amazon VPC 控制台https://console.aws.amazon.com/vpc/

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

  3. 選取您的子網。

  4. 在 ACL [網路] 索引標籤上,對於輸入規則,請確認規則允許來自電腦所需連接埠的輸入流量。否則,請刪除或修改會阻止流量的規則。

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

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

詢問您的網路管理員內部防火牆是否允許從連接埠 22 上的電腦輸入和輸出流量。

如果您的電腦上有防火牆,請確認防火牆允許來自通訊埠 22 的電腦輸入和輸出流量。

檢查您的執行個體是否有公開IPv4位址。

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

檢查執行個體的CPU負載;伺服器可能超載。

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

若要使用IPv6位址連線至執行個體,請檢查下列項目:

  • 您的子網路必須與路由表相關聯,該路由表具有IPv6通往網際網路閘道的流量 (::/0)。

  • 您的安全性群組規則必須允許來自連接埠 22 上本機IPv6位址的輸入流量。

  • 您的網路ACL規則必須允許輸入和輸出IPv6流量。

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

  • 您的本機電腦必須具有IPv6位址,且必須設定才能使用IPv6。

錯誤:無法載入金鑰 ... 期待:ANYPRIVATEKEY

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

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

    注意

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

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

  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).
如果您使用 Pu 連線TTY至執行個體
  • 確認您的私密金鑰 (.pem) 檔案已轉換為 Pu TTY (.ppk) 所辨識的格式。如需有關轉換私有金鑰的詳細資訊,請參閱使用 Pu Connect 到您的 Linux 執行個體 TTY

    注意

    在 P 中uTTYgen,載入您的私密金鑰檔案,然後選取儲存私密金鑰,而不是產生

  • 請確認您使用的是適當的使用者名稱連線AMI。在「PU TTY 組態」視窗的「主機名稱」方塊中輸入使用者名稱。

    AMI用於啟動實例 預設使用者名稱

    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 denied、或Connection closed by [instance] port 22,請確認您使用的是適當的使用者名稱連線,AMI您已指定適當的私密金鑰 (執行個體的.pem)檔案)。

適當的使用者名稱如下:

AMI用於啟動實例 預設使用者名稱

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. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

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

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

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

如果您產生了自己的金 key pair,請確保您的金鑰產生器已設置為建立RSA金鑰。DSA不接受金鑰。

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

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

  2. 在與目前執行個體相同的可用區域中啟動暫存執行個體 (使用與目前執行個體使用的類似或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 連線到 Linux 執行個體,請在本機電腦上執行下列步驟。

  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. 您應該能夠使用連接到您的 Linux 實例SSH。

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

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

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

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

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

    icacls.exe $path /inheritance:r
  5. 您應該能夠使用連接到您的 Linux 實例SSH。

錯誤:私密金鑰必須以「-------」開頭,並以「BEGINRSAPRIVATEKEY----------」結尾 END RSA PRIVATE KEY

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

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

ssh-keygen -m PEM

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

如果您使用 Pu 連線TTY至執行個體,並得到下列任一錯誤,錯誤:伺服器拒絕我們的金鑰或錯誤:沒有可用的支援驗證方法,請確認您使用的是正確的使用者名稱連線AMI。在 Pu TTY 組態視窗的使用者名稱中輸入使用者名稱。

適當的使用者名稱如下:

AMI用於啟動實例 預設使用者名稱

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 操作,請確保輸入安全性群組規則允許來自所有來源或發出指令的電腦或執行個體的Echo Request訊息ICMP流量。

如果您無法從執行個體發出ping命令,請確定輸出安全性群組規則允許Echo Request郵件傳送至所有目的地或嘗試 Ping 的主機的ICMP流量。

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

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

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

如果啟用 Keepalives 後仍然遇到問題,請嘗試在 Pu 配置的「連接」頁面上禁用 Nagle 的算法。TTY

錯誤:EC2執行個體 Connect 的主機金鑰驗證失敗

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

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

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

    您可以使用EC2執行個體連線,CLI或使用啟動執行個體時指派給執行個體的 SSH key pair,以及您用來啟動執行個體的預設使用者名稱來連線。AMI對於 Amazon Linux 2,默認的用戶名是ec2-user.

    例如,如果您的執行個體是使用 Amazon Linux 2 啟動,則執行個體的公共DNS名稱為ec2-a-b-c-d.us-west-2.compute.amazonaws.com,key pair 為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戶端 Connect 至您的 Linux 執行個體

  2. 導覽至以下資料夾。

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


    [ec2-user ~]$ ./eic_harvest_hostkeys

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

    您現在可以使用「EC2執行個體 Connect」瀏覽器用戶端連線至執行個體。

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

    您可以使用EC2執行個體連線,CLI或使用啟動執行個體時指派給執行個體的 SSH key pair,以及您用來啟動執行個體的預設使用者名稱來連線。AMI對於 Ubuntu,預設的使用者名稱為ubuntu

    例如,如果您的執行個體是使用 Ubuntu 啟動,則執行個體的公開DNS名稱為ec2-a-b-c-d.us-west-2.compute.amazonaws.com,key pair 為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戶端 Connect 至您的 Linux 執行個體

  2. 導覽至以下資料夾。

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


    [ec2-user ~]$ ./eic_harvest_hostkeys

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

    您現在可以使用「EC2執行個體 Connect」瀏覽器用戶端連線至執行個體。

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

如果您使用「EC2執行個體連線」連線至 Ubuntu 執行個體,但嘗試連線時看到錯誤訊息,您可以使用下列資訊嘗試修正問題。

可能的原因

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

解決方案

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

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

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

    apt update && apt upgrade

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

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

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

此值為 EBSINSTANCE-STORE

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

步驟 1:建立新的金鑰對

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

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

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

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

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

  3. 在 [詳細資料] 索引標籤上,記下執行個體 ID 和 AMI ID。

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

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

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

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

警告

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

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

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

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

  3. 在 [應用程式和作業系統映像] 區段中,選取您AMI用來啟動原始執行個體的相同項目。如果無法使AMI用,您可以建立可從停止AMI的執行個體使用的執行個體。如需詳細資訊,請參閱創建一個 Amazon 支EBS持 AMI

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

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

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

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

步驟 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 伺服器 2、Cent SUSE OS 12 及 7.x RHEL

        [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 是使用者識別碼,500 是群組識別碼。接下來,請使用 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 主控台中,選擇導覽窗格中的磁碟區,選取原始執行個體的根裝置磁碟區 (您在上一個步驟中記下磁碟區 ID),選擇 [動作]、[卸離磁碟區],然後選擇 [分離]。等待磁碟區的狀態變成 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:清理

(選用) 如果不需再使用時,您可以終止暫時執行個體。選取暫存執行處理,然後選擇執行個體狀態終止 (刪除) 執行處理