我正在尝试使用 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 1
或appname n
,其中 n 是集群中的主机数量。