如何通过公共访问私人主机

我有许多AWS EC2实例,其中一个具有公共IP地址,其余的没有公共IP地址。

我已经使用私钥/公钥对设置了对公用机器的SSH访问权限。 我现在需要通过这个公共实例访问networking的其余部分。

我被告知,如果我从密钥对创build一个.pem文件,并将其安装在公共实例上,我将能够首先SSH进入公共实例,并从那里,SSH到其他。

这感觉不对 将我的私钥复制到另一个实例并不安全。 是否有可能build立一个隧道(不pipe它是什么,我不是一个系统pipe理员)从我的本地机器有密钥对目标实例?

如果您可以从公共主机访问私有主机,则可以设置您的本地ssh config〜 ~/.ssh/config来使用您的公共主机作为ssh代理:

 Host PublicServer Hostname PUBLIC_DNS_OR_IP_HERE User USERNAME_HERE # Default ~/.ssh/id_rsa IdentityFile /path/to/your/private/ssh/key Host PrivateHost2 Hostname 192.168.168.2 Host PrivateHost3 Hostname 192.168.168.3 Host PrivateHost* 192.168.168.* Hostname %h User PRIVATE_HOSTS_USERNAME #Compression yes #ForwardX11 no #IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -W %h:%p PublicServer 

然后你可以运行ssh PrivateHost3通过ssh PrivateHost3连接到私有主机,甚至是ssh 192.168.168.3 ,在这种情况下你不需要创buildPrivateHostN条目。 不需要将您的私钥放到公共服务器上,都可以透明地工作。

你使用的是VPC还是EC2 Classic? 这些实例是否都在同一个子网上?或者至less都在同一个VPC内?

如果你有相同的VPC /子网中的实例,那么这就是我要做的:

  • 对于公用IP /实例,请将安全组configuration为允许来自您的WAN的入站SSH或工作IP块。

  • validation您可以在进行此更改后进入公用实例 – 如果正确,请继续执行下一步。

  • 创build一个安全组,只允许从公共实例入站访问Private实例。 您可以使用IP地址/ 32来指定公共实例作为Private实例SSH端口的预期IP入站。 或者你可能是懒惰的,并使用内部的子网范围 – 你自己。

    – 使用Public IP将公用实例SSH连接到公共实例。 然后尝试使用分配给实例的内部或私有IP地址连接到私有实例 – 现在您应该能够连接。