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

Ste*_*lsh 8 ssh amazon-web-services amazon-ec2 private-key

我在 AWS 上创建了两个 EC2 实例。我为他们每个人创建了一个密钥对。我下载了 .pem 私钥并将它们转换为.ppk格式。我可以使用 PuTTY 及其 .ppk 私钥连接到我的每个 ec2 实例。但是如何从我的一个 ec2 实例通过 SSH 连接到另一个实例?我可以从另一个 ping 它们中任何一个的公共 DNS。但是,如果我从一个尝试 ssh 到另一个,我会得到:

权限被拒绝(公钥)。

小智 9

方法 1 - 在服务器上使用相同的密钥:

将密钥转换为 openssh 格式并将私钥上传到服务器。当您 ssh 到目标主机时,指定私钥文件:

ssh -i mykey.pem private.ip.of.other.server
Run Code Online (Sandbox Code Playgroud)

方法 2 - 创建新密钥

在每台服务器上运行:

ssh-keygen
Run Code Online (Sandbox Code Playgroud)

按回车回车。您将有两个文件:

.ssh/id_rsa
.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

服务器 A 上, cat 并将公钥复制到剪贴板:

cat ~/.ssh/id_rsa.pub
[select and copy to your clipboard]
Run Code Online (Sandbox Code Playgroud)

ssh 进入服务器 B,并将其内容附加到它的 authorized_keys 文件:

cat >> ~/.ssh/authorized_keys
[paste your clipboard contents]
[ctrl+d to exit]
Run Code Online (Sandbox Code Playgroud)

现在从服务器 A ssh:

ssh -i ~/.ssh/id_rsa private.ip.of.other.server
Run Code Online (Sandbox Code Playgroud)


Rob*_*ujo 7

有第三个和恕我直言是所谓的ssh 代理转发的最佳解决方案:

  • 在本地机器上配置 ~/.ssh/config,通过添加以下部分:
Host <ip-or-name-of-A-server>
  ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)
  • 我假设在服务器 A 和 B 上,您将本地 ~/.ssh/id_rsa.pub 添加到服务器的 ~/.ssh/authorized_keys

在服务器 A 上工作时,您的密钥可用于进一步的 ssh 通信 - 例如:

  • 使用 ssh 客户端连接到其他服务器 - 在这种情况下连接到服务器 B,
  • scp(安全复制),
  • git - 您可以使用本地身份将/推送到远程 git 存储库
  • 等等。

要检查这是否有效:

  • 连接到服务器A
  • 通过检测 SSH_AUTH_SOCK env var 检查是否有用于密钥交换的套接字连接:
set|grep SSH_AUTH_ # output should be something like this:
SSH_AUTH_SOCK=/tmp/ssh-sEHiRF4hls/agent.12042
Run Code Online (Sandbox Code Playgroud)

笔记: