如何从一个 ec2 实例 ssh 到另一个?

如何从一个 ec2 实例 ssh 到另一个?

我在 AWS 上创建了两个 EC2 实例。我为每个实例创建了一个密钥对。我下载了 .pem 私钥并将其转换为 .ppk.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

按 Enter 键。您将获得两个文件:

.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 进行连接。由于密钥会过期,因此无需像以前一样直接跟踪或管理这些密钥。

相关内容