如何從一個 ec2 實例 ssh 到另一個實例?

如何從一個 ec2 實例 ssh 到另一個實例?

我在 AWS 上建立了兩個 EC2 執行個體。我為他們每個人創建了一個密鑰對。我下載了 .pem 私鑰並將其轉換為.ppk格式。我可以使用 PuTTY 及其 .ppk 私鑰連接到每個 ec2 實例。但如何從我的一個 ec2 實例透過 SSH 連線到另一個實例呢?我可以從其中一個 ping 另一個的公共 DNS。但如果我嘗試從一個到另一個的 ssh,我會得到:

權限被拒絕(公鑰)。

答案1

方法 1 - 在伺服器上使用相同的金鑰:

將金鑰轉換為 openssh 格式並將私鑰上傳到伺服器。當您 ssh 到目標主機時,指定私鑰檔案:

ssh -i mykey.pem private.ip.of.other.server

方法 2 - 建立新金鑰

在每台伺服器上運行:

ssh-keygen

按回車鍵回車。您將有兩個文件:

.ssh/id_rsa
.ssh/id_rsa.pub

伺服器A、 cat 並將公鑰複製到剪貼簿:

cat ~/.ssh/id_rsa.pub
[select and copy to your clipboard]

透過 SSH 進入伺服器B,並將其內容附加到它的authorized_keys 檔案中:

cat >> ~/.ssh/authorized_keys
[paste your clipboard contents]
[ctrl+d to exit]

現在從伺服器 A ssh:

ssh -i ~/.ssh/id_rsa private.ip.of.other.server

答案2

有第三個,恕我直言,最好的解決方案就是所謂的ssh代理轉發:

  • 在本機上設定 ~/.ssh/config,透過新增以下部分:
Host <ip-or-name-of-A-server>
  ForwardAgent yes
  • 我假設在伺服器 A 和 B 上,您將本機 ~/.ssh/id_rsa.pub 新增至伺服器的 ~/.ssh/authorized_keys

在伺服器 A 上工作時,您的金鑰可以用於進一步的 ssh 通訊 - 例如:

  • 使用 ssh 用戶端連接到其他伺服器 - 在本例中連接到伺服器 B,
  • scp(安全副本),
  • git - 您可以使用本機身分拉/推到遠端 git 儲存庫
  • ETC。

要檢查這是否有效:

  • 連接到伺服器A
  • 透過偵測 SSH_AUTH_SOCK 環境變數來檢查是否存在用於金鑰交換的套接字連線:
set|grep SSH_AUTH_ # output should be something like this:
SSH_AUTH_SOCK=/tmp/ssh-sEHiRF4hls/agent.12042

筆記:

答案3

針對該問題的新 AWS 解決方案。

EC2 執行個體連接

這是一篇相同的部落格文章:

AWS 部落格

請注意:

SSH 公鑰在實例元資料中只能一次性使用 60 秒。若要成功連線到實例,您必須在此時間視窗內使用 SSH 連線。由於密鑰會過期,因此無需像以前那樣直接追蹤或管理這些密鑰。

相關內容