希望这对其他人有所帮助,因为我花了几个小时试图弄清楚如何通过SSH从本地机器(macosx)连接到私有子网中的一个ec2实例,该实例充当通往其他资源(如redis、rds )的隧道。
为什么我需要访问我的私有子网资源?我希望能够为我正在构建的应用程序测试RDS数据库、redis和私有API网关。为什么我会采用OpenVPN上的SSM方法,公共子网中的Bastion主机,或者其他什么东西? 1)我直到最后才能完成我的MVP的构建,2)我从不同的来源读到,将一个堡垒主机放置到一个公共子网中可能会从安全的角度导致一些漏洞。
SSM方法似乎对我的沙箱环境很好,它目前是一个VPC,只有一个可用性区域中有一个公共子网和一个私有子网。我可以下载临时AWS CLI凭据,发出aws ssm控制台命令,并为驻留在私有子网后面的各种服务设置隧道。
我将列出我所采取的步骤,但是每次我想在私有子网中为服务设置隧道时,运行这些步骤似乎有点麻烦,因为有些vpn服务似乎很容易集成,而不需要额外的麻烦。如果您有更好的解决方案,或者改进我的方法,请告诉我。
:,首先,我将介绍我在这种方法中所采取的各种步骤。
中。
中启动了1个redis实例。
上使用pip3 for Python安装了awscli包
我为macosx安装了SSM插件(再次是我的本地机器) (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos)
通过运行以下命令,
aws ssm启动-会话-目标i-xxxxxxxxxxxxxxxxx
输出:sh-4.2美元
aws EC2-实例-连接
发送-ssh-公钥
-可用性-我们区-东-1c\
-实例-id i-xxxxxxxxxxxxxxxxx
-实例-os-用户EC2-用户
-ssh-公钥file://$HOME/.ssh/id_rsa.pub
我不完全确定为什么需要这一步,但如果有人有任何澄清,请补充。
$HOME/.ssh/config中主机i-* ProxyCommand sh -c "aws启动-会话-目标%h -文档名AWS-StartSSHSession -参数
,
用户@
我也不知道为什么仍然需要.pem文件,但是如果有人知道这是否真的是必需的,或者是另一种掩盖这一点的方法。如果没有pem文件,我将面临:拒绝许可(公共密钥,gssapi-keyex,gssapi-with-mic)。
请分享对此方法的任何正面或负面反馈。
发布于 2021-08-31 06:13:11
您之所以面临这个问题,是因为当您使用这个代理助手host i-* ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"运行SSH时,您所要做的就是在端口22上的AWS EC2实例之间创建一个oport隧道(默认情况下)。
这就是为什么在没有键的情况下连接到实例时会出现问题,因为在使用该实例跳转到redis服务器之前,需要将SSH连接到实例。
您的连接将以类似的方式穿越互联网:
ssh command -> aws ssm start-session -> internet -> ec2 server -> redis如果您不想使用SSH密钥,我建议使用VPN选项连接到内部资源:
https://aws.amazon.com/blogs/awsmarketplace/setting-up-openvpn-access-server-in-amazon-vpc/
https://stackoverflow.com/questions/68992735
复制相似问题