我在 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
笔记:
- 您需要运行 ssh 代理 - linux:,
ps -e | grep [s]sh-agent
对于 windows,请检查 putty 的实用程序 pagent 和 plink - 参考:https://help.github.com/articles/using-ssh-agent-forwarding
- ssh 故障排除:
https://confluence.atlassian.com/display/BITBUCKET/Troubleshoot+SSH+Issues