【发布时间】:2019-09-10 03:08:30
【问题描述】:
根据此 AWS 文档:Scenario 2: VPC with Public and Private Subnets (NAT) 我有自己的 VPC,有两个子网:私有和公共。在公共子网中,我部署了一个分配有 EIP 的 Ubuntu 16.04 实例。它还有下一个安全组入站规则:
Type Protocol Port Range Source Description
SSH TCP 22 xx.xx.xx.xx/32 Home IP
并相应地出站:
Type Protocol Port Range Source Description
SSH TCP 22 sg-xxprivatexx Security group ID for instance in private subnet
看起来不错,我可以在我家的外部 ssh 它。没问题。
在私有子网中,我部署了另一台带有下一个安全组(入站规则)的 Ubuntu 16.04 机器:
Type Protocol Port Range Source Description
HTTP TCP 80 sg-xxpublicxxx Security Group ID for bastion instance in public subnet
SSH TCP 22 sg-xxpublicxxx -
并且没有出站规则(实际上它打开了 80、443 个出站端口,但我猜它不是一个有趣的部分)。而且我仍然可以使用堡垒中的ssh 访问此虚拟机。
现在我只想做一件简单的事情——运行 ssh 端口转发,这样我就可以在我的家用 PC 浏览器上运行 localhost:8080 并查看我在我的私有实例上发布的网页。如果我从here 和here(以及here)正确理解它,我必须运行类似:
ssh -N -v -L 8080:10.0.1.112:80 ubuntu@3.121.46.99
我猜这基本上意味着:只需将来自 IP 10.0.1.112:80 的私有子网实例的流量通过我的堡垒 VM 转发到我的 localhost:8080,用户名 ubuntu 托管在 EIP 3.121.46.99 上。
调试以行结束:
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:ZyVHgnF8z5vE5gfNr1S2JDfjhdydZVTNevPRgJZ+sRA /home/matterai/.ssh/key.pem
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/matterai/.ssh/id_rsa
debug1: Trying private key: /home/matterai/.ssh/id_dsa
debug1: Trying private key: /home/matterai/.ssh/id_ecdsa
debug1: Trying private key: /home/matterai/.ssh/id_ed25519
debug1: No more authentication methods to try.
matterai@3.121.46.99: Permission denied (publickey).
我玩了几天,但我仍然无法理解我做错了什么。太奇怪了:我可以ssh -A(允许转发)到我的堡垒,我可以ssh 从堡垒到我的私人实例。但是我无法建立SSH隧道来查看我的网页(将来它将是mongodb)而不会出错。需要一些建议或指出正确的方向,拜托!谢谢。
UPD#1
那好吧。如果我使用本地机器和堡垒进行手动转发,我会得到预期的结果。基本上这意味着在堡垒上运行这个命令:
ubuntu@bastion: ssh -v -N -L 5000:localhost:8000 ubuntu@10.0.1.68
之后在本地/家庭机器上运行命令:
matterai@homepc: ssh -v -N -L 5000:localhost:5000 ubuntu@3.121.46.99
当我在本地机器上向localhost:5000 发出请求时,我可以看到结果页面。如果可以将这两个命令结合起来,我可以吗? (剧透:是的,有可能:看答案!)
【问题讨论】:
-
用户现在还应该考虑通过 EC2 Instance Connect 进行 SSH,这消除了对堡垒主机和开放端口的需要,使用 IAM 进行身份验证,并审核所有访问权限。
-
@jarmod 绝对同意您的观点,但对于尚未配置 EC2 Instance Connect 或具有类似网络设置但不在 AWS 中的人来说,它仍然很有用。
标签: amazon-web-services amazon-ec2 ssh ssh-tunnel