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

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

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

我已使用私钥/公钥对设置了对公共计算机的 SSH 访问。我现在需要通过此公共实例访问网络的其余部分。

有人告诉我,如果我.pem根据我的密钥对创建一个文件并将其安装在公共实例上,我将能够首先通过 SSH 进入公共实例,然后从那里通过 SSH 进入其他实例。

这感觉不对。将我的私钥复制到另一个实例感觉不安全。是否可以从具有密钥对的本地计算机到目标实例设置隧道(无论它是什么,我不是系统管理员)?

答案1

如果您可以从公共主机访问私有主机,您可以设置本地 ssh 配置~/.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通过 PublicServer 连接到私有主机,或者甚至ssh 192.168.168.3,在这种情况下,您不需要创建 PrivateHostN 条目。无需将您的私钥放入 PublicServer,一切都透明地工作。

答案2

您使用的是 VPC 还是 EC2 Classic?这些实例是否都位于同一子网中 - 或者至少都位于同一 VPC 中?

如果您在同一个 VPC/子网中拥有实例,那么我会这样做:

  • 对于公共 IP/实例,配置安全组以允许来自您的 WAN 或工作 IP 块的入站 SSH。

  • 验证您在进行此更改后是否可以通过 SSH 进入公共实例 - 如果可以,请继续下一步。

  • 创建一个安全组,仅允许从公共实例对私有实例进行入站访问。您可以使用 IP 地址/32 将公共实例指定为私有实例 SSH 端口的预期入站 IP。或者您可以偷懒并使用内部子网范围 - 由您决定。

    -现在使用公共 IP 通过 SSH 进入公共实例。然后尝试仅使用分配给实例的内部或私有 IP 地址连接到私有实例 - 现在您应该能够连接。

相关内容