我有多个 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 地址连接到私有实例 - 现在您应该能够连接。