Я пытаюсь использовать служебную программу eb cli (версия 3.8.7), чтобы попытаться подключиться к моим управляемым экземплярам ElasticBeanstalk по SSH.
У экземпляров есть только частные IP-адреса, и я подключаюсь к VPC через VPN.
Когда я запускаю команду 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 ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
ssh: Could not resolve hostname ip-xxx-xxx-xxx-xxx.ec2.internal: nodename nor servname provided, or not known
Есть ли способ настроить утилиту eb cli для использования вместо этого локального IP-адреса?
Насколько я понимаю, нет абсолютно никакого способа сообщить eb cli, что вы хотите подключиться к частному IP или внутреннему DNS. Основная проблема в том, что они находятся в частной подсети, и на самом деле нет способа подключиться без использования другого хоста, который является общедоступный. Я смог решить эту проблему, подключившись к моему хосту-бастиону, который находится в том же VPC, что и моя среда EB. Использование хоста-бастиона - довольно стандартная практика, так что, надеюсь, он у вас уже есть! Так что на самом деле это проблема ~ / .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
Возможно, вы сможете настроить псевдоним в своем .ssh/config
файл, который выглядит примерно так:
Host ip-xxx-xxx-xxx-xxx.ec2.internal
Hostname yyy.yyy.yyy.yyy
Вы также можете изменить sshops.py
использовать частное DNS-имя. Зависит от ОС и версии, но моя находится здесь:
~/Library/Python/2.7/lib/python/site-packages/ebcli/operations/sshops.py
Ищи PublicIpAddress
(мой находится в строке 88) и измените его следующим образом:
ip = instance['PrivateDnsName'] #was PublicIpAddress
Жаль, что интерфейса командной строки EB нет на Github ... иначе я бы предложил способ сделать это с помощью параметра.
Я также добавил для этого удобный псевдоним:
alias appname='eb init appname;eb ssh --region=us-east-1 appname -n'
Это позволяет запускать appname 1
или appname n
, где n - количество хостов в вашем кластере.