基本上我需要能够从一个连接EC2使用 SSH 连接到另一个实例。我运行该命令ssh -i path-to-pem-file ec2-user@dns-address-of-ec2-instance
,但超时了。
我将安全组设置为允许从第二个 EC2 实例的公共 IP 地址进行 SSH 入站,但它仍然不起作用。我知道一切都应该没问题,因为当我将 SSH 入站流量设置为“允许来自任何地方”时,我可以毫无问题地进行连接。我还可以从家用计算机连接到 EC2 实例(我将我的 IP 地址添加到安全组),没有任何问题。
显然,我不能将入站流量开放为“允许来自任何地方”,但当我将其限制为仅第二个 EC2 实例的 IP 地址时,我似乎无法连接。也许公共 IP 地址不是我应该放入安全组的地址?
我似乎也无法 ping 通它;它只是超时了。这是结果ssh -vv -i path-to-pem-file ec2-user@dns-address-of-ec2-instance
OpenSSH_6.2p2, OpenSSL 1.0.1h-fips 5 Jun 2014
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 50: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to dns-address [IP Address different from public ip] port 22.
debug1: connect to address [IP Address different from public ip] port 22: Connection timed out
ssh: connect to host dns-address port 22: Connection timed out
答案1
EC2 实例使用内部10.X.X.X
地址(如果使用 VPC,则使用其他地址),并且流向其“公共”IP 地址的流量只需重新路由到内部 IP 地址。 EC2 实例还使用不可公开访问的不同 DNS 服务器。当您解析另一个 EC2 实例的主机名时,因为您位于AWS网络,它为您提供实例的10.X.X.X
地址而不是公共 IP 地址。这可以防止流量必须传出到互联网并返回,从而使其速度更快。
即使您可以按 IP 地址列入白名单,这也不是一个好主意,因为在 EC2 经典模式下,您的内部地址和公共地址都可能会更改。正确的解决方案是按安全组加入白名单。您基本上向目标安全组添加一条规则,表示允许来自特定源安全组的端口 22。
如果两个实例位于同一帐户中,您只需允许sg-1234abcd
(其中sg-1234abcd
是源实例所属的安全组)。如果它们位于不同的帐户中,请包含帐号,例如111122223333/sg-1234abcd
。
看文档获取更多信息。