2016-03-05 65 views
-2

我在同一子網有兩臺EC2實例,但我當我試圖使用SSH從一個實例到另一個我得到公鑰被拒絕的消息,但不提示密碼無法ssh登錄EC2實例在同一子網

[根@ ip-10-0-21-156〜]#ssh [email protected] 權限被拒絕(publickey)。

+0

你在該服務器上配置了ssh來使用密碼而不是ssh密鑰嗎?由於它不提示輸入密碼,這聽起來像你沒有。 –

回答

0

默認情況下,EC2實例配置爲通過公鑰/私鑰提供SSH驗證。因此,就像您需要一個私鑰(您可能在創建IAM密鑰對時下載了.pem文件)安裝在本地計算機上以便SSH進入實例一樣,您還需要在實例上安裝私鑰以便從該實例到另一個實例的SSH。

您在幕後沒有看到的是,當您啓動實例並指定了密鑰對名稱時,EC2讓您下載私鑰(.pem文件),自動創建實例上的用戶(例如在Ubuntu AMI上,用戶名是'ubuntu',在Amazon Linux AMI上,用戶名是'ec2-user')並且它將與私鑰匹配的公鑰放入〜/ .ssh/authorized_keys文件中。所有這些都需要在可以通過SSH連接到實例之前進行。因此,假設您使用相同的密鑰對啓動了兩個實例,爲了從實例A到實例B進行SSH通信,除了將私鑰(.pem文件)放入〜/ .ssh目錄。 AWS認爲保留實例上的私鑰存在安全風險,因此不會自動執行。所以,簡單地說私鑰到.ssh目錄上的實例A,然後把它添加到你的鑰匙圈也可以指定像這樣的SSH命令的關鍵是:

ssh -i ~/.ssh/PRIVATE_KEY.pem [email protected]_B_LOCAL_IP 

所有這一切說,它通常是一個壞的想要在EC2實例上保留其他實例的私鑰,並且如果您發現自己需要這樣做,那麼您應該重新考慮您的架構,無論它在做什麼(即可能有更好的方法)。

此外,你真的不應該使用EC2創建的用戶帳戶(即ubuntu @或ec2-user @)進行正常的日常工作,甚至不需要執行維護或其他系統管理員工作。您應該真的創建自己的賬戶,因爲EC2創建的賬戶本質上是一個根賬戶。

AWS建議您繼續對所有帳戶使用公鑰/私鑰身份驗證,但您可以切換使用基於密碼的身份驗證,然後無需擔心密鑰。與使用基於密鑰的身份驗證相比,這本質上安全性較低,但是,如果給予嚴格的密碼要求,則可以提高安全性

創建其他帳戶(基於密碼或基於密鑰)時,唯一需要做的事情是確保您的個性化帳戶具有sudo訪問權限,以便您可以sudo執行需要root訪問權限的操作。

USERNAME ALL=(ALL) NOPASSWD:ALL 

當你在那裏,可以考慮禁用了sudo的訪問:在Ubuntu中,你可以通過添加以下行/etc/sudoers.d/90-cloud-init-users文件做到這一點EC2創建了用戶名。即使沒有其他人擁有密鑰,每個人都會知道有一個擁有sudo訪問權限的Ubuntu帳戶。就像使用密碼一樣,知道用戶名是黑客工作的重要組成部分。

希望這會有所幫助。