Назад | Перейти на главную страницу

AWS Elasticbean Beanstalk eb ssh с использованием частных DNS-имен

Я пытаюсь использовать служебную программу 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 - количество хостов в вашем кластере.