使用PuTTY連接AWS的時候,一直出現network error connection refused。百度了這個問題,大家都說是SSH要設置成22。但是我已經設置過了,為什么還是遇到這個問題呢?
原來官方早已給了答案。大家看下邊。
排查實例的連接問題
下面是在您嘗試連接到實例時可能遇到的問題與錯誤消息。
內容
有關 Windows 實例的更多幫助信息,請參閱Amazon EC2 用戶指南(適用於 Microsoft Windows 實例)中的排除 Windows 實例的故障。
您還可以在 Amazon EC2 forum搜索答案和發布問題。
連接到您的實例時出錯:連接超時
如果在連接到您的實例時看到以下錯誤消息:Network error: Connection timed out
或Error connecting to [instance], reason: -> Connection timed out: connect
,請嘗試以下選項:
-
檢查您的安全組規則。您需要一個安全組規則,該規則允許適當的端口上來自公有 IP 地址的入站流量。
-
打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
-
在導航窗格中,選擇 Instances,然后選擇您的實例。
-
在 Description 選項卡中的 Security groups 旁邊,選擇 view rules 以顯示有效規則的列表。
-
對於 Linux 實例:驗證是否有允許流量從您的計算機到端口 22 (SSH) 的規則。
對於 Windows 實例:驗證是否有允許流量從您的計算機到端口 3389 (RDP) 的規則。
如果您的安全組具有允許來自單個 IP 地址的入站流量的規則,則當您的計算機在企業網絡上,或當您通過 Internet 服務提供商 (ISP) 進行連接時,此地址可能不是靜態的。請改為指定客戶端計算機使用的 IP 地址的范圍。如果您的安全組沒有上一步中所述的允許入站流量的規則,請向您的安全組添加一個規則。有關更多信息,請參閱授權網絡訪問您的實例。
-
-
[EC2-VPC](我是這一步出錯了)大家設置的時候,特別注意第五步與第六步。
-
查看子網的路由表。您需要一個路由來將目標在 VPC (
0.0.0.0/0
) 外的所有數據流發送到 VPC 的 Internet 網關。-
打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
-
在 Description 選項卡中,記下 VPC ID 和 Subnet ID 的值。
-
打開 Amazon VPC 控制台 https://console.aws.amazon.com/vpc/。
-
在導航窗格中,選擇 Internet Gateways。驗證是否有 Internet 網關連接到您的 VPC。如果沒有,請選擇 Create Internet Gateway 並按照指示創建一個 Internet 網關,選擇此 Internet 網關,然后選擇 Attach to VPC 並按照指示將其掛載到您的 VPC。
-
在導航窗格中,選擇 Subnets,然后選擇您的子網。
-
在 Route Table 選項卡上,驗證帶有
0.0.0.0/0
的路由是否為目的地,並驗證您的 VPC 的 Internet 網關是否為目標。如果不是,請選擇路由表的 ID (rtb-xxxxxxxx) 以導航到路由表的 Routes 選項卡,依次選擇 Edit、Add another route,在 Destination 中輸入0.0.0.0/0
,從 Target 中選擇您的 Internet 網關,然后選擇 Save。
-
-
[EC2-VPC] 檢查子網的網絡訪問控制列表 (ACL)。該網絡 ACL 必須允許適當的端口上來自公有 IP 地址的入站和出站流量。默認網絡 ACL 允許所有入站和出站流量。
-
打開 Amazon VPC 控制台 https://console.aws.amazon.com/vpc/。
-
在導航窗格中,選擇 Your VPCs。
-
在 Summary 選項卡上,找到 Network ACL,選擇 ID (acl-xxxxxxxx),然后選擇 ACL。
-
在 Inbound Rules 選項卡上,驗證規則是否允許來自您的計算機的流量。如果不允許,請刪除或修改阻止來自您的計算機的流量的規則。
-
在 Outbound Rules 選項卡上,驗證規則是否允許到您的計算機的流量。如果不允許,請刪除或修改阻止到您的計算機的流量的規則。
-
-
如果您的計算機在企業網絡上,請詢問網絡管理員內部防火牆是否允許端口 22(對於 Linux 實例)或端口 3389(對於 Windows 實例)上來自您的計算機的入站和出站流量。
如果您的計算機有防火牆,請驗證其是否允許端口 22(對於 Linux 實例)或端口 3389(對於 Windows 實例)上來自您的計算機的入站和出站流量。
-
檢查您的實例是否具有公有 IP 地址。如果沒有,您可以將彈性 IP 地址與您的實例關聯。有關更多信息,請參閱 彈性 IP 地址。
-
檢查實例上的 CPU 負載,服務器可能已超過負載。AWS 自動提供數據,例如 Amazon CloudWatch 指標和實例狀態,您可以使用這些數據查看實例上 CPU 的負載情況;如有必要,還可以調整負載的處理方式。有關更多信息,請參閱 使用 CloudWatch 監控您的實例。
-
如果您的負載是可變的,您可以使用 Auto Scaling 和 Elastic Load Balancing 自動增加或減少實例。
-
如果您的負載呈穩定增長的態勢,您可以遷移到更大的實例類型。有關更多信息,請參閱調整您的實例大小。
-
錯誤:服務器無法識別用戶密鑰
如果您使用 SSH 連接到實例
-
請在連接時使用
ssh -vvv
獲得三倍的詳細調試信息:#ssh -vvv -i [your key name].pem ec2-user@[public DNS address of your instance].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).
如果您使用 SSH (MindTerm) 連接到實例
-
如果未啟用 Java,則服務器不會識別該用戶密鑰。要啟用 Java,請參閱 Java 文檔中的如何在 Web 瀏覽器中啟用 Java?。
如果您使用 PuTTY 連接到實例
-
驗證您的私有密鑰 (.pem) 文件已經轉換為 PuTTY (.ppk) 可以識別的格式。有關轉換您的私有密鑰的更多信息,請參閱 使用 PuTTY 從 Windows 連接到 Linux 實例。
Note
在 PuTTYgen 中,加載您的私有密鑰文件並選擇 Save Private Key (保存私有密鑰) 而不是 Generate (生成)。
-
驗證您在連接時是否對為 AMI 使用了正確的用戶名稱。在 PuTTY Configuration (PuTTY 配置) 窗口的 Host name (主機名) 框中輸入用戶名。
-
對於 Amazon Linux AMI,用戶名稱是
ec2-user
。 -
對於 RHEL5 AMI,用戶名稱為
root
或ec2-user
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
。 -
對於 Fedora AMI,用戶名稱為
fedora
或ec2-user
。 -
對於 SUSE Linux,用戶名稱是
root
或ec2-user
。 -
另外,如果
ec2-user
和root
無法使用,請與 AMI 供應商核實。
-
-
驗證您的入站安全組規則允許入站流量進入合適的端口。有關更多信息,請參閱授權網絡訪問您的實例。
錯誤:未找到主機密鑰,權限被拒絕 (publickey),或者 身份驗證失敗,權限被拒絕
如果您使用 SSH 連接到實例並得到以下任一錯誤:Host key not found in [directory]
、Permission denied (publickey)
或 Authentication failed, permission denied
,請驗證您使用了 AMI 的相應用戶名稱進行連接且 已為實例指定正確的私有密鑰 (.pem)
文件。對於 MindTerm 客戶端,在 Connect To Your Instance (連接到您的實例) 窗口中的 User name (用戶名稱) 框中輸入用戶名稱。
正確的用戶名如下所示:
-
對於 Amazon Linux AMI,用戶名稱是
ec2-user
。 -
對於 RHEL5 AMI,用戶名稱為
root
或ec2-user
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
。 -
對於 Fedora AMI,用戶名稱為
fedora
或ec2-user
。 -
對於 SUSE Linux,用戶名稱是
root
或ec2-user
。 -
另外,如果
ec2-user
和root
無法使用,請與 AMI 供應商核實。
請確認您使用的私有密鑰文件對應於您啟動實例時選擇的密鑰對。
-
打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
-
選擇實例。在 Description 選項卡上,驗證 Key pair name 的值。
-
如果您啟動實例時沒有指定密鑰對,則可以終止實例並啟動新實例,從而確保指定密鑰對。如果這是您一直使用的實例,但您不再具有密鑰對的
.pem
文件,則可以使用新的密鑰對取代該密鑰對。有關更多信息,請參閱 丟失私有密鑰時連接到 Linux 實例。
錯誤:未保護的私鑰文件
必須保護您的私鑰文件,防止其他任何用戶對其進行讀寫操作。如果除您外其他任何人都能夠讀取或寫入您的私鑰,則 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 會忽略此密鑰。要修復此錯誤,請執行以下命令,替入您的私鑰文件的路徑。
$ chmod 0400 .ssh/my_private_key.pem
錯誤:服務器拒絕我們的密鑰或 沒有支持的身份驗證方法
如果在使用 PuTTY 連接到您的實例時收到以下兩種錯誤之一:Error: Server refused our key
或 Error: No supported authentication methods available
,請驗證在連接時是否為 AMI 使用了正確的用戶名稱。在 PuTTY Configuration (PuTTY 配置) 窗口的 User name (用戶名) 框中輸入用戶名。
正確的用戶名如下所示:
-
對於 Amazon Linux AMI,用戶名稱是
ec2-user
。 -
對於 RHEL5 AMI,用戶名稱為
root
或ec2-user
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
。 -
對於 Fedora AMI,用戶名稱為
fedora
或ec2-user
。 -
對於 SUSE Linux,用戶名稱是
root
或ec2-user
。 -
另外,如果
ec2-user
和root
無法使用,請與 AMI 供應商核實。
您還應驗證您的私有密鑰 (.pem) 文件已經正確轉換為 PuTTY (.ppk) 可以識別的格式。有關轉換您的私有密鑰的更多信息,請參閱 使用 PuTTY 從 Windows 連接到 Linux 實例。
在 Safari 瀏覽器上使用 MindTerm 時的錯誤
如果您使用 MindTerm 連接到實例並且使用 Safari Web 瀏覽器,則可能會收到以下錯誤:
Error connecting to your_instance_ip
, reason:
—> Key exchange failed: Host authentication failed
您需要更新瀏覽器的安全設置以允許 AWS 管理控制台在不安全模式下運行 JAVA 插件。
使用 Mac OS X RDP 客戶端時出錯
如果您使用 Microsoft 網站的遠程桌面連接客戶端連接到 Windows Server 2012 R2 實例,則可能會收到以下錯誤:
Remote Desktop Connection cannot verify the identity of the computer that you want to connect to.
從 Apple iTunes 存儲下載 Microsoft 遠程桌面應用程序,然后使用該應用程序連接到實例。
無法對實例執行 Ping 操作
ping
命令是一種 ICMP 流量 — 如果您無法對實例執行 ping 操作,請確保您的入站安全組規則允許的 Echo Request
消息的 ICMP 流量來自所有資源,或來自從中發出命令的計算機或實例。如果您無法從實例發出 ping
命令,請確保您的出站安全組規則允許的 Echo Request
消息的 ICMP 流量發送到所有目標,或發送到您正在嘗試對其執行 ping 操作的主機。