设置从公共服务器到私有服务器-EC2 的 SSH 连接?

Posted

技术标签:

【中文标题】设置从公共服务器到私有服务器-EC2 的 SSH 连接?【英文标题】:Set up for SSH connection from a public server to private server- EC2? 【发布时间】:2017-05-21 09:14:19 【问题描述】:

我有一个 EC2 Linux 服务器,它在子网 a 中有公共 IP,此外我在子网 b 中创建了另一个 EC2 服务器,它有一个私有 IP。两台服务器都在同一个 VPC 中。我想从公共服务器 ssh 到私人服务器。 SSH 端口在服务器的安全组设置中打开。但我的权限被拒绝(公共 IP)

[ec2-user@ip-10-0-10-62 ~]$ ssh ec2-user@10.0.20.71
The authenticity of host '10.0.20.71 (10.0.20.71)' can't be established.
RSA key fingerprint is 11:19:79:39:a3:04:d2:23:5e:af:9e:c6:98:9c:7b:bd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.20.71' (RSA) to the list of known hosts.
Permission denied (publickey).

我相信,我需要以某种方式将私有服务器的公钥添加到公共服务器中。但我不知道正确的方法以及是否缺少其他设置。

我在谷歌上搜索过,但找不到解决此问题的直接方法。

更新:

如果我使用添加代理,那么我只能从我的电脑 ssh 到私人服务器,如果有更多用户需要 ssh 到私人服务器,都需要做代理转发,所以我不确定是否这是本案的最佳方式。如果我想连接公共服务器时使用密钥,然后不使用密钥 ssh 到私有服务器怎么办。喜欢:

ssh ec2-user@10.0.20.71

一个答案:可以使用默认的密钥位置。 (身份文件)

Setting the default ssh key location

【问题讨论】:

您是否使用相同的密钥对启动了两台服务器? @helloV 没有密钥对不同 【参考方案1】:

由于您使用自己的密钥对启动了每个服务器,因此您必须使用每个服务器各自的密钥对来通过 ssh 访问它。因此,有两种方法可以登录 10.0.20.71。 1)您可以将用于启动它的私钥的副本放到公共服务器上,然后使用它对私有服务器进行身份验证 - 例如

[ec2-user@ip-10-0-10-62 ~]$ ssh -i you_private_key.pem ec2-user@10.0.20.71

可以说更安全的解决方案是使用 ssh 代理转发。使用此解决方案,您不会将私钥存储在服务器上。在您的计算机上,您应该拥有用于创建 2 个 EC2 实例的 2 个密钥。您可以使用命令将这两个都添加到 ssh 代理中

$ ssh-add /path/to/key

进入代理后,您可以通过代理转发登录公共服务器:

 ssh -A ec2-user@<public ip address of public server>

然后 ssh 到没有密钥的私有服务器(代理从您的计算机转发密钥)

ssh ec2-user@10.0.20.71

【讨论】:

感谢您的回答。它非常接近我的需要。但是还有另一台具有这种设置的服务器,我可以按照您所说的无需密钥 ssh 到私有服务器,但是当我从计算机连接到公共服务器时,我使用: ssh -i "/path/key/key1.pem" user@ ec2-....aws.com 然后从公共服务器,我通过以下方式连接到私有服务器:ssh ec2-user@10.0.10.30。我只知道私有服务器的密钥(id_rsa n id_rsa.pub)在公共服务器上的目录 ~/.ssh/ 中,而且它似乎是由 sshd 设置而不是用户添加的。你知道这个设置是如何工作的吗?请查看更新后的问题。【参考方案2】:

您应该已经为第二个实例分配了一个公钥。您还应该在创建该公钥时下载它。您需要使用 SFTP 或 SCP 将该公钥文件上传到第一个实例。然后,您需要使用ssh 命令的-i 选项指定该公钥文件的路径。

【讨论】:

感谢您的回复。我在为服务器提供午餐时创建并分配了一个密钥对。每个服务器都有自己的密钥(key.pem)。然后我应该从我的私人服务器的 .pem 密钥创建一个公钥并将其复制到我的公共服务器吗?你建议哪条路? ~/.ssh/ ?但是 sshd 设置呢? 您无需更改 sshd 中的任何内容。 ~/.ssh/ 是通常的路径。您只需将服务器 B 的 key.pem 文件复制到服务器 A 上,并在从服务器 A 连接到服务器 B 时使用该文件。【参考方案3】:

您要连接的实例与您用来连接的机器一样好。所以假设你有一个实例 A 和一个实例 B,如果你想从 A -> B 连接,那么它就像从你的机器连接到 B 一样好

要实现这一点,您必须执行与连接到机器 B 相同的操作,将 B 的 pem 文件下载到机器 A 上(在这种情况下,您必须使用 scp 将 pem 文件上传到机器 A命令)

发布这个,你应该能够正确地 ssh。同样,我想知道 ssh 的用例,因为在 samba、sftp 等的帮助下,还有许多其他选项可以在服务器之间共享数据。

您可以查看此链接以了解如何 scp:scp (secure copy) to ec2 instance without password

干杯!

【讨论】:

【参考方案4】:

假设keypair2.pem是您的私有服务器(10.0.20.71)的私钥(如果您使用AWS仪表板/CLI/SDK创建密钥对,则返回私钥)

来自公共服务器:

ssh -i keypair2.pem ec2-user@10.0.20.71

如果私有服务器是 Ubuntu 机器:

ssh -i keypair2.pem ubuntu@10.0.20.71

如果您仍有问题,请发布以下输出:

ssh -v -i keypair2.pem ec2-user@10.0.20.71

【讨论】:

以上是关于设置从公共服务器到私有服务器-EC2 的 SSH 连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何从ec2实例ssh到另一个ec2实例而不将公钥存储在其中一个实例中?

Open*** 客户端到 SSH 到 EC2 私有实例

通过 Ubuntu 堡垒到私有子网中的 EC2 实例的 SSH 隧道

从另一个远程服务器 SSH 到 AWS ec2 实例?

AWS 如何从私有子网中的 EC2 实例打开网站

AWS EC2 公共 IP 与私有 IP