AWS Elasticbean Beanstalk eb ssh 使用私有 DNS 名称

AWS Elasticbean Beanstalk eb ssh 使用私有 DNS 名称

我正在尝试使用 eb cli 实用程序(版本 3.8.7)尝试通过 SSH 连接到我的 ElasticBeanstalk 托管实例。

这些实例只有私有 IP 地址,并且我使用 VPN 连接到 VPC。

当我运行命令 eb ssh 时,它尝试连接到我的本地 DNS 无法解析的私有 DNS 域

$ eb ssh -n 1
INFO: Attempting to open port 22.
INFO: SSH port 22 open.
INFO: Running ssh -i /Users/dkotvan/.ssh/qa-cert [email protected]
ssh: Could not resolve hostname ip-xxx-xxx-xxx-xxx.ec2.internal: nodename nor servname provided, or not known

有没有办法配置 eb cli 实用程序以使用本地 IP 地址?

答案1

据我所知,根本没有办法告诉 eb cli 您想要连接到私有 IP 或内部 DNS。主要问题是,它们位于私有子网上,如果不使用另一台主机,实际上就没有办法进行连接可公开访问。我能够通过连接到与我的 EB 环境位于同一 VPC 中的堡垒主机来解决这个问题。使用堡垒主机是非常标准的做法,所以希望你已经有一个了!所以这实际上只是一个 ~/.ssh/config 问题:

Host aws-bastion
  Hostname xxx.xxx.xxx.xxx #bastion public IP
  User your-bastion-user
  IdentityFile ~/.ssh/your-aws-key.pem
  Port 22 # or, a non-standard port if you configured it
  ForwardAgent yes
Host *.ec2.internal
  IdentityFile ~/.ssh/your-aws-key.pem
  ProxyCommand ssh -q aws-bastion nc %h 22

答案2

不可以,截至 2021 年 4 月,仍无法配置 EB CLI 以使用私有 DNS/IP 地址。不过,aws/aws-elastic-beanstalk-cli/问题/3未来可能会实现这一目标。

另一方面,它可以实现通过禁用 Elastic Beanstalk 环境的网络设置中的公共 IP 地址。这将导致EB CLI 使用私有 IP 地址作为后备(这并不明显)。

谢谢达斯汀的回答来澄清这一点。

答案3

您可能可以在文件中设置一个.ssh/config如下所示的别名:

Host ip-xxx-xxx-xxx-xxx.ec2.internal
  Hostname yyy.yyy.yyy.yyy

答案4

您还可以修改sshops.py以使用私有 DNS 名称。因操作系统和版本而异,但我的位于此处:

~/Library/Python/2.7/lib/python/site-packages/ebcli/operations/sshops.py

搜索PublicIpAddress(我的是第 88 行),并将其更改为:

ip = instance['PrivateDnsName'] #was PublicIpAddress

遗憾的是 EB CLI 不在 Github 上......否则我会贡献一种通过参数来实现这一点的方法。

我还为此添加了一个方便的别名:

alias appname='eb init appname;eb ssh --region=us-east-1 appname -n'

这允许运行appname 1appname n,其中 n 是集群中的主机数量。

相关内容